Monday, 10 March 2008

I've been working on the PostSharp4EF project of EFContrib. I'm pleased to announce relationships are now supported.

This actually proved to be somewhat more work, because of all the things that are happening behind the scenes.
Entity Framework expects EdmRelationshipNavigationProperty attributes on top of the property that points to a relationship. But there is also the giant EdmRelationshipAttribute with about 8 constructor parameters.
So, I now generate these for you.

The next step was to actually get the relationship for you. I do that by removing the backing field, and replacing it with methods that access the relationshipmanager to get the relationship.

I do not want you to work directly with EF types, but you will need a way to Load relationships. So, I've introduced an interface with the appropriate Load and IsLoaded methods. Just in case you do want to hook into the EntityCollection and EntityReference, I've also supplied methods on that interface that will get you these types.

Let's look at a domain model:

  0 [Poco("SimpleRelationshipTestEntities")]
  1  public class Customer
  2 {
  3   public int CustomerID { get; set; }
  4   public string Name { get; set; }
  6   public ICollection<Car> Cars { get; set; }
  8   public ICollection<Order> Orders { get; set; }
  9 }
  11 [Poco("SimpleRelationshipTestEntities")]
  12  public class Car
  13 {
  14   public int CarID { get; set; }
  15   public string Make { get; set; }
  17   public Customer Customer { get; set; }
  19 }
  21 [Poco("SimpleRelationshipTestEntities")]
  22  public class Order
  23 {
  24   public int OrderID { get; set; }
  25   public int Amount { get; set; }
  27   public Customer Customer { get; set; }
  30 }

You might notice that I do not expose the concrete EF types, but instead expose ICollections.
After compilation, you can use this domainmodel like this:

  0    using (SimpleRelationshipTestEntities context = new SimpleRelationshipTestEntities())
  1    {
  3     foreach (Car oldCar in context.Car)
  4     {
  5      IRelationshipLoader noLazyLoading = PostSharp.Post.Cast<Car, IRelationshipLoader>(oldCar);
  7      bool wasLoaded = noLazyLoading.IsLoaded("Customer");
  9      EntityReference<Customer> cu = noLazyLoading.GetRelatedReference<Customer>("Customer");
  10      cu.Load();
  12      wasLoaded = noLazyLoading.IsLoaded("Customer");
  13     }
  17     // clear out database
  18     foreach (Customer old in context.Customer)
  19     {
  20      IRelationshipLoader noLazyLoading = PostSharp.Post.Cast<Customer, IRelationshipLoader>(old);
  22      bool wasLoaded = noLazyLoading.IsLoaded("Orders");
  24      noLazyLoading.Load("Orders");
  25      wasLoaded = noLazyLoading.IsLoaded("Orders");
  27      EntityCollection<Order> orders = noLazyLoading.GetRelatedCollection<Order>("Orders");
  29      context.DeleteObject(old);
  30     }
  31     context.SaveChanges();
  34     Customer c = new Customer { Name = "Ruurd Boeke" };
  35     Customer c2 = new Customer { Name = "Test Customer" };
  36     Car car = new Car { Make = "Ferrari" };
  37     Order o1 = new Order { Amount = 10 };
  38     Order o2 = new Order { Amount = 20 };
  39     Order o3 = new Order { Amount = 30 };
  41     car.Customer = c;
  42     car.Customer = c2// can re assign test
  44     // add customer on order
  45     o1.Customer = c;
  46     o2.Customer = c;
  47     // add order on customer, new way
  48     c.Orders.Add(o3);
  52     context.AddToCustomer(c);
  53     context.AddToCustomer(c2);
  54     context.SaveChanges();
  55    }
  56   }

Points of interest:
Line 5 casts your object to the implemented interface. This is checked at compile-time, so no worries about breaking at runtime. Using this cast, I can get to the EF types like I do at line 9 and line 27. Obviously, if you were inclined, you could place these methods on your domain classes. It does couple you to EF more though and clutters the code.

Next up are complex types. When that's done, I'm finished.

Quite pleased with this actually! ;-)

Thursday, 14 October 2010 15:00:15 (Romance Standard Time, UTC+01:00)
<p>Of the 30 million in the <a href="">vibram fivefingers</a> activities, 2010 non-environment-majors on China walk first stage <a href="">vibram five</a> activities, the poem ended Co., LTD. Offers outdoor products to both the retail price is lucky <a href="">five finger</a> skywalker prize for ¥1980 German professional outdoor shoe in <a href="">vibram shoes</a> on GTX RENEGADE for hiking shoes. They will be wearing this pair of the world’s most powerful boots origin produces the boots top <a href="">five fingers</a> product officially began to walk.Called “outside” of the ID of the winners is walking <a href="">vibram five finger</a> across the big horqin sandy land “green channel”. Inner Mongolia horqin sandy land and <a href="">fivefingers kso</a> liaoning, jilin across three provinces, 92% of eastern Inner Mongolia above <a href="">vibram five fingers</a> distribution in chifeng city, area and the tongliao 5 million square <a href="">vibram five fingers shoes</a> kilometers, ranking first in four sand. Genghis khan’s <a href="">vibram kso</a> brother, and its subordinate subordinates’ called cheap five finger shoes, then formed by <a href="">vibram classic</a> tribe.In the first stage, the activity ended at the second stage, the second phase will start to Tibet, xinjiang, “stand in xinjiang, ningxia, Tibet, shaanxi, gansu, qinghai and within the <a href="">vibram flow</a> scope of land.</p>
<p>If you want to take part in outdoor activities, persistent and very love this <a href="">vibram fivefingers kso</a> sport, so choose cheap vibram is very important. A set of suitable equipment can indeed for our outdoor activities to provide protection, let us be more close to nature, feel nature.We choose to suit <a href="">5fingers</a> oneself is suitable for environmental equipment, so we first concern is the applicability of the equipment, rather than spend less money for price, event, although is good, but usually sale <a href="">five finger speed</a> is reality, the most expensive sometimes are not is most appropriate. There is not expected to equipment can be armed to the teeth. A bite to eat dinner.</p>
<p><a href="">MBT shoes</a> have become increasingly popular. Because of its tremendous role to humans. <a href="">mbt walking shoes</a> not only fashionable, but also healthy. I think this is more important is fashion. Swiss <a href="">mbt shoes sale</a>, Karl Mueller invented. His invention came to the United Kingdom. In tourism this journey, it can be found wearing <a href="">mbt sale</a> can easily get ahead, he who is like a walk in the soft grass. It takes years of research and development, <a href="">mbt shoes review</a> Sale market development began in 1996, selling over one million every year is growing <a href="">mbt footwear</a> rapidly.<a href=""></a> </p>
Thursday, 14 October 2010 15:04:32 (Romance Standard Time, UTC+01:00)
3_103.html"><strong> </strong></a> are made more unique by the inclusion of a large wooden button with the Ugg logo on it and an elastic band closure. So it allows you to wear t
Just as with the <a href=""><strong>UGG boots</strong></a> the new calf high boot that this <a href=""><strong>Ugg Australia</strong></a> company have introduced the Bailey Button offers the same level of comfort. Certainly for women who are looking for a pair of <a href=""><strong>UGG sale</strong></a> to team with jeans or a long skirt these are ideal.But as you will soon discover these <a href=" with this detailing on shown or you can undo the button and then turn the top over to create a cuff.With all the boots included in <a href=""><strong>Cheap UGG boots</strong></a> Australia’s Classic Collection range the <a href=""><strong>UGG bailey button</strong></a> is lined with twin faced Grade A sheepskin. Also there is the traditional suede heel guard to ensure that not only is this area protected but offers this part of the <a href=""><strong>UGG boots sale</strong></a> support. Plus within the <a href=""><strong>UGG classic cardy</strong></a> you find each pair has sock liners that are made from sheepskin PU foam so increasing the level of comfort a person feels when wearing <a href=""><strong>UGG short boots</strong></a>.<a href=""><strong>zigtech shoes</strong></a> is very unique. It uses an innovative lightweight foam materials,<a href=""><strong>ZigTech trainers</strong></a> are designed to help you run further and faster, allowing you to train while using their unique <a href=""><strong>Easytone shoes</strong></a> harder for longer with reduced risk of injury. They do this by providing lots of cushioning Yesterday we saw the promo video featuring Thierry Henry and Lewis Hamilton talking about the trainers. So today we’re looking at the latest technical video released by Reebok to explain what <a href=""><strong>Discount Reebok Easytone</strong></a> is and how the <a href=""><strong>zigtech sale</strong></a> sole the Slinky-esque midsole/outsole that is said to reduce muscle wear and transfer energy. <a href=""><strong>Reebok zigtech shoes</strong></a> Stadium bring an innovative technology shoes- <a href=""><strong>Reebok easytone shoes</strong></a> training run. We series, is the best <a href=""><strong>Easy tone shoes</strong></a> sport technology to date. It can reduce 20% of the leg muscle fatigue and wear, in order to cultivate strength and degree of difficulty is significantly increased.<a href=""><strong>MBT shoes</strong></a> effect abdominal, leg and buttock <a href=""><strong>Cheap mbt shoes</strong></a> looks sunny, so it is a good choice <a href=""><strong>MBT shoes sale</strong></a> believe that human fitness majestic, <a href=""><strong>Skecher Shape Ups</strong></a> walk to a large extent. This view wholesale <a href=""><strong>Discount MBT Shoes</strong></a> a number of scientific ,Therefore, majestic mbt shoes and strengthen peoples understanding <a href=""><strong>shape ups Shoes</strong></a> .in <a href=""><strong>shape up skechers</strong></a> through disseminate the majestic <a href=""><strong>shape ups discount</strong></a> ideas and concepts.
Tuesday, 26 October 2010 02:56:04 (Romance Standard Time, UTC+01:00)
href="">Reebok ZigTech</a> tests the shoes on real runners who fill in a detailed questionnaire at the start, mid-way and end of 300-mile increments. They’re light, flexible and so comfortable. <a href="">Reebok ZigTech shoes</a> footwear, training longer just got easier.<a href="">Reebok Easytone Shoes</a> has the top technology which uses shoes’ energy and transfers it horizontally. ZigTech helps to transfer weight through the whole range of motion by pushing the force of the strike through to the front of your foot. <a href="">Discount Reebok zigtech</a> footwear is designed to protect your feet and return energy to the athlete for a soft and springy ride. The foam is lightweight. Forefoot flex grooves for added <a href="">Reebok EasyTone</a> flexibility. This ultimately enables athletes to stay healthier during in this season.<br>
Tuesday, 26 October 2010 02:56:18 (Romance Standard Time, UTC+01:00)
href=""><strong>Cheap mbt shoes</strong></a> is not too high, if the heel is higher than 3.5 cm, it will increase the risk of lumbar lordosis and lumbosacral angle, which easily lead to fatigue and lower back pain and lumbosacral joint.Moreover, the girls who wear high heels early will lead to <a href=""><strong>Discount Mbt Shoes</strong></a> the developing pelvic tilt, which make the <a href=""><strong>Mbt shoes clearance</strong></a>, is demanding.However, they are not only for people on their feet but for anyone who wants to wear a pair of comfortable <a href=""><strong>Mbt shoes outlet</strong></a> that takes the pain away from your body when you are standing and walking. That’s why you need to wear <a href=""><strong>MBT Sandals Shoes</strong></a>.
Thursday, 04 November 2010 04:38:36 (Romance Standard Time, UTC+01:00)
Comments are closed.