<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Ruurd Boeke Enterprise development and technobabble - EF-Contrib</title>
    <link>http://www.sitechno.com/Blog/</link>
    <description>All about agile, OR-mapping and winfx - yeah baby!</description>
    <language>en-us</language>
    <copyright>Ruurd Boeke</copyright>
    <lastBuildDate>Tue, 05 Aug 2008 14:23:46 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>contact@sitechno.com</managingEditor>
    <webMaster>contact@sitechno.com</webMaster>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=e9815481-aa5f-4a57-a214-8781446edc17</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,e9815481-aa5f-4a57-a214-8781446edc17.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,e9815481-aa5f-4a57-a214-8781446edc17.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e9815481-aa5f-4a57-a214-8781446edc17</wfw:commentRss>
      <slash:comments>8</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The EFDesign team is giving you a platform to discuss the way they are planning to
implement POCO into EF. This is the time to be heard, so click <a href="http://blogs.msdn.com/efdesign/archive/2008/08/01/discussion-about-api-changes-necessary-for-poco.aspx" target="_blank">here</a>. 
<br />
I have been spending my energy on my upcoming international move and silverlight,
but it’s an interesting post that I will be following with great interest!
</p>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=e9815481-aa5f-4a57-a214-8781446edc17" />
      </body>
      <title>Be heard: API changes discussion on EF Poco</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,e9815481-aa5f-4a57-a214-8781446edc17.aspx</guid>
      <link>http://www.sitechno.com/Blog/BeHeardAPIChangesDiscussionOnEFPoco.aspx</link>
      <pubDate>Tue, 05 Aug 2008 14:23:46 GMT</pubDate>
      <description>&lt;p&gt;
The EFDesign team is giving you a platform to discuss the way they are planning to
implement POCO into EF. This is the time to be heard, so click &lt;a href="http://blogs.msdn.com/efdesign/archive/2008/08/01/discussion-about-api-changes-necessary-for-poco.aspx" target="_blank"&gt;here&lt;/a&gt;. 
&lt;br /&gt;
I have been spending my energy on my upcoming international move and silverlight,
but it’s an interesting post that I will be following with great interest!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=e9815481-aa5f-4a57-a214-8781446edc17" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,e9815481-aa5f-4a57-a214-8781446edc17.aspx</comments>
      <category>EF (Entity Framework);EF-Contrib</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=02c38c95-b751-4f12-b02b-16e1e513d43f</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,02c38c95-b751-4f12-b02b-16e1e513d43f.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,02c38c95-b751-4f12-b02b-16e1e513d43f.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=02c38c95-b751-4f12-b02b-16e1e513d43f</wfw:commentRss>
      <slash:comments>15</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
        </p>
        <p>
I started my career when I was still in university. I started a company named <a href="http://www.sitechno.com" target="_blank">Sitechno</a> that
did webapplications and custom solutions. The last few years, I’ve been hired as a
consultant on some big projects. 
<br />
The role I was given on my last project, allowed me to do some crazy cool stuff, using
nHibernate and winforms. I was able to push WCF, WF and WPF into a big client/server
application, and had great success with it. We reformed a monolithic data-oriented
application into a domain-oriented loosely coupled application.
</p>
        <p>
It’s easy enough to find new projects, but the market for the cutting edge technologies
is not very big ;-)
</p>
        <p>
When I was asked to join Microsoft, my main attraction to the offer was the opportunity
to work on cutting edge technology with a group of passionate people. When I talked
Microsofties on the Redmond campus, it became clear that they could certainly offer
just that.
</p>
        <p>
I was torn between working on EF (which, I’ve been very involved with lately) and
on Silverlight. 
<br />
In the end, Silverlight won, because I strongly believe it to be the strongest contender
in the client space, there is an interesting ‘war’ going on right now, and I have
really enjoyed working with the WPF-framework in the past. I was torn by the decision
because whatever choice I made, I knew that a great opportunity would be lost. 
</p>
        <p>
We will be heading to Vancouver, Canada in September and I will work for Microsoft
Canada for a year. After that, I will be allowed to work in the U.S.A. and we will
move to Redmond.
</p>
        <p>
You can not believe how excited I am about this opportunity. I will be working for <a href="http://blogs.msdn.com/sburke/default.aspx" target="_blank">Shawn
Burke</a> on Silverlight Controls. I’m not sure yet who else is working on the team,
but I believe/hope I’ll be working with <a href="http://blogs.msdn.com/delay/default.aspx" target="_blank">David</a>,
Ted, <a href="http://blogs.msdn.com/kirti/default.aspx" target="_blank">Kirti</a> and <a href="http://www.jeff.wilcox.name/" target="_blank">Jeff</a>. 
</p>
        <p>
As for <a href="http://www.codeplex.com/efcontrib" target="_blank">EFContrib</a>:
although I’m dedicated to it, I’m having a hard time finding the time to work on it.
Also, since version 2.0 of EF will feature some nice Poco capabilities. So, I’m not
sure if people are waiting for the solution. It would be nice to make it work with
SL though! So, if I find the time, or get lots of mail of people wanting me to finish
it properly, I’ll work on it some more.
</p>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=02c38c95-b751-4f12-b02b-16e1e513d43f" />
      </body>
      <title>I&amp;rsquo;m joining Microsoft!!</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,02c38c95-b751-4f12-b02b-16e1e513d43f.aspx</guid>
      <link>http://www.sitechno.com/Blog/IrsquomJoiningMicrosoft.aspx</link>
      <pubDate>Fri, 25 Jul 2008 08:46:13 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
I started my career when I was still in university. I started a company named &lt;a href="http://www.sitechno.com" target="_blank"&gt;Sitechno&lt;/a&gt; that
did webapplications and custom solutions. The last few years, I’ve been hired as a
consultant on some big projects. 
&lt;br /&gt;
The role I was given on my last project, allowed me to do some crazy cool stuff, using
nHibernate and winforms. I was able to push WCF, WF and WPF into a big client/server
application, and had great success with it. We reformed a monolithic data-oriented
application into a domain-oriented loosely coupled application.
&lt;/p&gt;
&lt;p&gt;
It’s easy enough to find new projects, but the market for the cutting edge technologies
is not very big ;-)
&lt;/p&gt;
&lt;p&gt;
When I was asked to join Microsoft, my main attraction to the offer was the opportunity
to work on cutting edge technology with a group of passionate people. When I talked
Microsofties on the Redmond campus, it became clear that they could certainly offer
just that.
&lt;/p&gt;
&lt;p&gt;
I was torn between working on EF (which, I’ve been very involved with lately) and
on Silverlight. 
&lt;br /&gt;
In the end, Silverlight won, because I strongly believe it to be the strongest contender
in the client space, there is an interesting ‘war’ going on right now, and I have
really enjoyed working with the WPF-framework in the past. I was torn by the decision
because whatever choice I made, I knew that a great opportunity would be lost. 
&lt;/p&gt;
&lt;p&gt;
We will be heading to Vancouver, Canada in September and I will work for Microsoft
Canada for a year. After that, I will be allowed to work in the U.S.A. and we will
move to Redmond.
&lt;/p&gt;
&lt;p&gt;
You can not believe how excited I am about this opportunity. I will be working for &lt;a href="http://blogs.msdn.com/sburke/default.aspx" target="_blank"&gt;Shawn
Burke&lt;/a&gt; on Silverlight Controls. I’m not sure yet who else is working on the team,
but I believe/hope I’ll be working with &lt;a href="http://blogs.msdn.com/delay/default.aspx" target="_blank"&gt;David&lt;/a&gt;,
Ted, &lt;a href="http://blogs.msdn.com/kirti/default.aspx" target="_blank"&gt;Kirti&lt;/a&gt; and &lt;a href="http://www.jeff.wilcox.name/" target="_blank"&gt;Jeff&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
As for &lt;a href="http://www.codeplex.com/efcontrib" target="_blank"&gt;EFContrib&lt;/a&gt;:
although I’m dedicated to it, I’m having a hard time finding the time to work on it.
Also, since version 2.0 of EF will feature some nice Poco capabilities. So, I’m not
sure if people are waiting for the solution. It would be nice to make it work with
SL though! So, if I find the time, or get lots of mail of people wanting me to finish
it properly, I’ll work on it some more.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=02c38c95-b751-4f12-b02b-16e1e513d43f" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,02c38c95-b751-4f12-b02b-16e1e513d43f.aspx</comments>
      <category>EF (Entity Framework);EF-Contrib;Personal;Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=eb673ee6-bcbe-4b4a-b76d-9235ef7df79d</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,eb673ee6-bcbe-4b4a-b76d-9235ef7df79d.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,eb673ee6-bcbe-4b4a-b76d-9235ef7df79d.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=eb673ee6-bcbe-4b4a-b76d-9235ef7df79d</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just finished a small sample application that illustrates a client/server application
using Entity Framework on the server and just regular objects on the client. The client
has custom changetracking and the server is able to attach the graph to a context
again. Source can be found at the <a href="http://www.codeplex.com/efcontrib" target="_blank">efcontrib</a> page,
and I guess I'm almost ready to do a proper release!
</p>
        <p>
[I used <a href="http://www.codeplex.com/prism" target="_blank">Prism</a> to build
the client in a Model View Controller approach. It was a fun exercise and I'm looking
forward to seeing that project released.]
</p>
        <p>
The application manages employees and allows for setting a 'teamleader' on an employee:
think of 'is managed by'. I thought it would be cool to send that over the wire.
</p>
        <p>
Here is a screenshot of the main view of the application:
</p>
        <p>
          <a href="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/Newsampleapplicationfordisconnectedntier_D20E/image_2.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="214" alt="image" src="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/Newsampleapplicationfordisconnectedntier_D20E/image_thumb.png" width="240" border="0" />
          </a>
        </p>
        <p>
As you can see, you can 'choose' an employee. When you press that button, you will
see another screen where you can enter a lastname. It will fill a grid with employees
matching that criteria and allows you to choose from that list. 
<br />
It is also allowed to 'add an employee'. There are actually 3 types of employees you
can add: Mort, Elvis and Einstein. 
</p>
        <p>
On the row of teamleader, you can again press the 'choose' button, which will allow
you to set a relation between the employee you are editing and another employee.
</p>
        <p>
On the server, there are a few methods like this:
</p>
        <p>
        </p>
        <div style="background: #000000; color: #f2f0df; font-family: monospace">
          <span style="color: teal"> 
0 </span>
          <span style="color: #eeeeee">  </span>
          <span style="color: #90ee90">public</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">List</span>
          <span style="color: #c0c0c0">&lt;</span>
          <span style="color: #ff0080">Employee</span>
          <span style="color: #c0c0c0">&gt;</span>
          <span style="color: #eeeeee"> GetEmployees(</span>
          <span style="color: #90ee90">string</span>
          <span style="color: #eeeeee"> lastNameBeginsWith)</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  1 </span>
            <span style="color: #eeeeee"> 
{</span>
          </div>
          <span style="color: teal">  2 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #90ee90">using</span>
          <span style="color: #eeeeee"> (</span>
          <span style="color: #ff0080">InheritanceTypeContext</span>
          <span style="color: #eeeeee"> context </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">InheritanceTypeContext</span>
          <span style="color: #eeeeee">())</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  3 </span>
            <span style="color: #eeeeee">  
{</span>
          </div>
          <span style="color: teal">  4 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  5 </span>
            <span style="color: #eeeeee">    </span>
            <span style="color: #ff0080">List</span>
            <span style="color: #c0c0c0">&lt;</span>
            <span style="color: #ff0080">Employee</span>
            <span style="color: #c0c0c0">&gt;</span>
            <span style="color: #eeeeee"> employees </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> (</span>
            <span style="color: #90ee90">from</span>
            <span style="color: #eeeeee"> e </span>
            <span style="color: #90ee90">in</span>
            <span style="color: #eeeeee"> context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Person</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">OfType</span>
            <span style="color: #c0c0c0">&lt;</span>
            <span style="color: #ff0080">Employee</span>
            <span style="color: #c0c0c0">&gt;</span>
            <span style="color: #eeeeee">()</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Include(</span>
            <span style="color: #00ffff">"TeamLeader"</span>
            <span style="color: #eeeeee">)</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Include(</span>
            <span style="color: #00ffff">"TeamMembers"</span>
            <span style="color: #eeeeee">)</span>
          </div>
          <span style="color: teal">  6 </span>
          <span style="color: #eeeeee">      </span>
          <span style="color: #90ee90">where</span>
          <span style="color: #eeeeee"> e</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Lastname</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">StartsWith(lastNameBeginsWith)</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  7 </span>
            <span style="color: #eeeeee">      </span>
            <span style="color: #90ee90">select</span>
            <span style="color: #eeeeee"> e)</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">ToList();</span>
          </div>
          <span style="color: teal">  8 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  9 </span>
            <span style="color: #eeeeee">    </span>
          </div>
          <span style="color: teal">  10 </span>
          <span style="color: #eeeeee">   
employees</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">ForEach(p </span>
          <span style="color: #c0c0c0">=&gt;</span>
          <span style="color: #eeeeee"> context</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">PrepareForSerialization(p))
;</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  11 </span>
            <span style="color: #eeeeee">    </span>
            <span style="color: #90ee90">return</span>
            <span style="color: #eeeeee"> employees;</span>
          </div>
          <span style="color: teal">  12 </span>
          <span style="color: #eeeeee">  
}</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  13 </span>
            <span style="color: #eeeeee"> 
}</span>
          </div>
          <span style="color: teal">  14 </span>
          <span style="color: #000000">
          </span>
          <br />
        </div>
        <p>
        </p>
        <p>
 
</p>
        <p>
You can see me taking care to call the 'prepareForSerialization' on each graph that
I'm returning on line 10.
</p>
        <p>
The client can just use these objects like normal.
</p>
        <p>
 
</p>
        <p>
I'll look into delving into it a bit with a screencast soon.
</p>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=eb673ee6-bcbe-4b4a-b76d-9235ef7df79d" />
      </body>
      <title>New sample application for disconnected n-tier EntityFramework objects</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,eb673ee6-bcbe-4b4a-b76d-9235ef7df79d.aspx</guid>
      <link>http://www.sitechno.com/Blog/NewSampleApplicationForDisconnectedNtierEntityFrameworkObjects.aspx</link>
      <pubDate>Wed, 16 Apr 2008 13:55:10 GMT</pubDate>
      <description>&lt;p&gt;
I just finished a small sample application that illustrates a client/server application
using Entity Framework on the server and just regular objects on the client. The client
has custom changetracking and the server is able to attach the graph to a context
again. Source can be found at the &lt;a href="http://www.codeplex.com/efcontrib" target="_blank"&gt;efcontrib&lt;/a&gt; page,
and I guess I'm almost ready to do a proper release!
&lt;/p&gt;
&lt;p&gt;
[I used &lt;a href="http://www.codeplex.com/prism" target="_blank"&gt;Prism&lt;/a&gt; to build
the client in a Model View Controller approach. It was a fun exercise and I'm looking
forward to seeing that project released.]
&lt;/p&gt;
&lt;p&gt;
The application manages employees and allows for setting a 'teamleader' on an employee:
think of 'is managed by'. I thought it would be cool to send that over the wire.
&lt;/p&gt;
&lt;p&gt;
Here is a screenshot of the main view of the application:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/Newsampleapplicationfordisconnectedntier_D20E/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="214" alt="image" src="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/Newsampleapplicationfordisconnectedntier_D20E/image_thumb.png" width="240" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
As you can see, you can 'choose' an employee. When you press that button, you will
see another screen where you can enter a lastname. It will fill a grid with employees
matching that criteria and allows you to choose from that list. 
&lt;br /&gt;
It is also allowed to 'add an employee'. There are actually 3 types of employees you
can add: Mort, Elvis and Einstein. 
&lt;/p&gt;
&lt;p&gt;
On the row of teamleader, you can again press the 'choose' button, which will allow
you to set a relation between the employee you are editing and another employee.
&lt;/p&gt;
&lt;p&gt;
On the server, there are a few methods like this:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="background: #000000; color: #f2f0df; font-family: monospace"&gt;&lt;span style="color: teal"&gt;&amp;#160;
0 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;List&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Employee&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; GetEmployees(&lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; lastNameBeginsWith)&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 1 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 2 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;using&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;InheritanceTypeContext&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;InheritanceTypeContext&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;())&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 3 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 4 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 5 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;List&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Employee&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; employees &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #90ee90"&gt;from&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; e &lt;/span&gt;&lt;span style="color: #90ee90"&gt;in&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Person&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;OfType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Employee&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;()&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Include(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;TeamLeader&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Include(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;TeamMembers&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 6 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;where&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; e&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Lastname&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;StartsWith(lastNameBeginsWith)&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 7 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;select&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; e)&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;ToList();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 8 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 9 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 10 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
employees&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;ForEach(p &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;PrepareForSerialization(p))
;&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 11 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;return&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; employees;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 12 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 13 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 14 &lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt; 
&lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
You can see me taking care to call the 'prepareForSerialization' on each graph that
I'm returning on line 10.
&lt;/p&gt;
&lt;p&gt;
The client can just use these objects like normal.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
I'll look into delving into it a bit with a screencast soon.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=eb673ee6-bcbe-4b4a-b76d-9235ef7df79d" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,eb673ee6-bcbe-4b4a-b76d-9235ef7df79d.aspx</comments>
      <category>EF (Entity Framework);EF-Contrib;WPF (Avalon)</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=46346fcf-cd65-4493-a115-29dbd48fb645</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,46346fcf-cd65-4493-a115-29dbd48fb645.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,46346fcf-cd65-4493-a115-29dbd48fb645.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=46346fcf-cd65-4493-a115-29dbd48fb645</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I first wanted to focus on the other aspects of EFContrib, but I finally sat down
and finished the last missing piece of <a href="http://www.codeplex.com/efcontrib" target="_blank">EFContrib</a>:
full inheritance support for both the server bits and the client bits.
</p>
        <p>
Most work was in the serialization actually, since the surrogate classes need to now
also serialize the properties of base types. 
</p>
        <p>
I'm working on a sample right now that will show off the system in WPF. But you can
check out some of the code in the test project. 
<br />
This is the domain I'm using:
</p>
        <p>
          <a href="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/InheritancesupportforEFContrib_AB70/image_2.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/InheritancesupportforEFContrib_AB70/image_thumb.png" width="140" border="0" />
          </a>
        </p>
        <p>
In the following code I'm using it.
</p>
        <p>
        </p>
        <div style="background: #000000; color: #f2f0df; font-family: monospace">
          <span style="color: teal"> 
0 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #90ee90">using</span>
          <span style="color: #eeeeee"> (</span>
          <span style="color: #ff0080">InheritanceTypeConnection</span>
          <span style="color: #eeeeee"> context </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">InheritanceTypeConnection</span>
          <span style="color: #eeeeee">())</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  1 </span>
            <span style="color: #eeeeee">  
{</span>
          </div>
          <span style="color: teal">  2 </span>
          <span style="color: #eeeeee">    </span>
          <span style="color: #90ee90">var</span>
          <span style="color: #eeeeee"> persons </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">from</span>
          <span style="color: #eeeeee"> p </span>
          <span style="color: #90ee90">in</span>
          <span style="color: #eeeeee"> context</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Person</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  3 </span>
            <span style="color: #eeeeee">         </span>
            <span style="color: #90ee90">select</span>
            <span style="color: #eeeeee"> p;</span>
          </div>
          <span style="color: teal">  4 </span>
          <span style="color: #eeeeee">    </span>
          <span style="color: #90ee90">foreach</span>
          <span style="color: #eeeeee"> (</span>
          <span style="color: #ff0080">Person</span>
          <span style="color: #eeeeee"> p </span>
          <span style="color: #90ee90">in</span>
          <span style="color: #eeeeee"> persons)</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  5 </span>
            <span style="color: #eeeeee">    
context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">DeleteObject(p);</span>
          </div>
          <span style="color: teal">  6 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  7 </span>
            <span style="color: #eeeeee">   
context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">SaveChanges();</span>
          </div>
          <span style="color: teal">  8 </span>
          <span style="color: #eeeeee">  
}</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  9 </span>
          </div>
          <span style="color: teal">  10 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #90ee90">string</span>
          <span style="color: #eeeeee"> MsgOnWire </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">String</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Empty;</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  11 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #90ee90">int</span>
            <span style="color: #eeeeee"> id;</span>
          </div>
          <span style="color: teal">  12 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #90ee90">using</span>
          <span style="color: #eeeeee"> (</span>
          <span style="color: #ff0080">InheritanceTypeConnection</span>
          <span style="color: #eeeeee"> context </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">InheritanceTypeConnection</span>
          <span style="color: #eeeeee">())</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  13 </span>
            <span style="color: #eeeeee">  
{</span>
          </div>
          <span style="color: teal">  14 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  15 </span>
            <span style="color: #eeeeee">    </span>
            <span style="color: #ff0080">Einstein</span>
            <span style="color: #eeeeee"> lead </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">new</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">Einstein</span>
            <span style="color: #eeeeee"> {
Firstname </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #00ffff">"Bill"</span>
            <span style="color: #eeeeee">,
Lastname </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #00ffff">"G"</span>
            <span style="color: #eeeeee"> };</span>
          </div>
          <span style="color: teal">  16 </span>
          <span style="color: #eeeeee">   
context</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">AddToPerson(lead);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  17 </span>
          </div>
          <span style="color: teal">  18 </span>
          <span style="color: #eeeeee">    </span>
          <span style="color: #ff0080">Mort</span>
          <span style="color: #eeeeee"> e1 </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">Mort</span>
          <span style="color: #eeeeee"> {
Firstname </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"Ruurd"</span>
          <span style="color: #eeeeee">,
Lastname </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"Boeke"</span>
          <span style="color: #eeeeee">,
Language </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"C#"</span>
          <span style="color: #eeeeee">,
EF</span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #90ee90">true</span>
          <span style="color: #eeeeee">,
WCF</span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #90ee90">true</span>
          <span style="color: #eeeeee">,
WF</span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">true</span>
          <span style="color: #eeeeee">,
WPF</span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #90ee90">true</span>
          <span style="color: #eeeeee">,
TeamLeader</span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee">lead
};</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  19 </span>
            <span style="color: #eeeeee">   
context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">AddToPerson(e1);</span>
          </div>
          <span style="color: teal">  20 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  21 </span>
            <span style="color: #eeeeee">    </span>
            <span style="color: #ff0080">Elvis</span>
            <span style="color: #eeeeee"> e2 </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">new</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">Elvis</span>
            <span style="color: #eeeeee"> {
Firstname </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #00ffff">"Elvis"</span>
            <span style="color: #eeeeee">,
Lastname </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #00ffff">"Presley"</span>
            <span style="color: #eeeeee">,
Language </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #00ffff">"Java"</span>
            <span style="color: #eeeeee">,
EF </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">false</span>
            <span style="color: #eeeeee">,
WCF </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">true</span>
            <span style="color: #eeeeee">,
WF </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">false</span>
            <span style="color: #eeeeee">,
WPF </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">true</span>
            <span style="color: #eeeeee">,
TeamLeader </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> lead
};</span>
          </div>
          <span style="color: teal">  22 </span>
          <span style="color: #eeeeee">   
context</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">AddToPerson(e2);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  23 </span>
          </div>
          <span style="color: teal">  24 </span>
          <span style="color: #eeeeee">   
context</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">SaveChanges();</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  25 </span>
            <span style="color: #eeeeee">   
id </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> e1</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">PersonID;</span>
          </div>
          <span style="color: teal">  26 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  27 </span>
            <span style="color: #eeeeee">   
MsgOnWire </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Serialize(e1);  </span>
            <span style="color: #a4a4a4">//
we'll take mort as the graphroot (no importance)</span>
          </div>
          <span style="color: teal">  28 </span>
          <span style="color: #eeeeee">  
}</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  29 </span>
          </div>
          <span style="color: teal">  30 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #a4a4a4">//
deserialize</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  31 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #ff0080">MortClient</span>
            <span style="color: #eeeeee"> mClient </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> MsgOnWire</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">DeserializeForClient</span>
            <span style="color: #c0c0c0">&lt;</span>
            <span style="color: #ff0080">MortClient</span>
            <span style="color: #c0c0c0">&gt;</span>
            <span style="color: #eeeeee">();</span>
          </div>
          <span style="color: teal">  32 </span>
          <span style="color: #eeeeee">  
mClient</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Firstname </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"changedAt"</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #c0c0c0">+</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff8080">DateTime</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Now</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">ToString();</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  33 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #90ee90">string</span>
            <span style="color: #eeeeee"> nameToCheck </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> mClient</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Firstname;</span>
          </div>
          <span style="color: teal">  34 </span>
          <span style="color: #eeeeee">  
mClient</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">EF </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">; </span>
          <span style="color: #a4a4a4">//
mort tends to forget skills</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  35 </span>
          </div>
          <span style="color: teal">  36 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #ff0080">EmployeeClient</span>
          <span style="color: #eeeeee"> teamlead </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> mClient</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">TeamLeader;</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  37 </span>
          </div>
          <span style="color: teal">  38 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #a4a4a4">//
elvis is a free soul, he can not be managed.</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  39 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #ff0080">ElvisClient</span>
            <span style="color: #eeeeee"> eClient </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> (</span>
            <span style="color: #ff0080">ElvisClient</span>
            <span style="color: #eeeeee">)
mClient</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">TeamLeader</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">TeamMembers</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Last();</span>
          </div>
          <span style="color: teal">  40 </span>
          <span style="color: #eeeeee">  
mClient</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">TeamLeader</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">TeamMembers</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Remove(eClient);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  41 </span>
            <span style="color: #eeeeee">  
eClient</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">TeamLeader </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">null</span>
            <span style="color: #eeeeee">;</span>
          </div>
          <span style="color: teal">  42 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  43 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #a4a4a4">//
always add more einsteins in the mix</span>
          </div>
          <span style="color: teal">  44 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #ff0080">EinsteinClient</span>
          <span style="color: #eeeeee"> einClient </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">EinsteinClient</span>
          <span style="color: #eeeeee"> {
EF </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">true</span>
          <span style="color: #eeeeee">,
WCF </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">true</span>
          <span style="color: #eeeeee">,
WF </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">,
WPF </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">,
TeamLeader </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> teamlead,
Firstname </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"Albert"</span>
          <span style="color: #eeeeee">,
Language </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"C#"</span>
          <span style="color: #eeeeee">,
Lastname </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"Einstein"</span>
          <span style="color: #eeeeee"> };</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  45 </span>
            <span style="color: #eeeeee">  
teamlead</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">TeamMembers</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Add(einClient);</span>
          </div>
          <span style="color: teal">  46 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  47 </span>
          </div>
          <span style="color: teal">  48 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #a4a4a4">//
serialize</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  49 </span>
            <span style="color: #eeeeee">  
MsgOnWire </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> mClient</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">SerializeForClient();</span>
          </div>
          <span style="color: teal">  50 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  51 </span>
          </div>
          <span style="color: teal">  52 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #90ee90">using</span>
          <span style="color: #eeeeee"> (</span>
          <span style="color: #ff0080">InheritanceTypeConnection</span>
          <span style="color: #eeeeee"> context </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">InheritanceTypeConnection</span>
          <span style="color: #eeeeee">())</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  53 </span>
            <span style="color: #eeeeee">  
{</span>
          </div>
          <span style="color: teal">  54 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  55 </span>
            <span style="color: #eeeeee">    </span>
            <span style="color: #a4a4a4">//
deserialize</span>
          </div>
          <span style="color: teal">  56 </span>
          <span style="color: #eeeeee">    </span>
          <span style="color: #ff0080">Mort</span>
          <span style="color: #eeeeee"> m </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> context</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Deserialize</span>
          <span style="color: #c0c0c0">&lt;</span>
          <span style="color: #ff0080">Mort</span>
          <span style="color: #c0c0c0">&gt;</span>
          <span style="color: #eeeeee">(MsgOnWire);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  57 </span>
          </div>
          <span style="color: teal">  58 </span>
          <span style="color: #eeeeee">   
context</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">SaveChanges();</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  59 </span>
            <span style="color: #eeeeee">  
}</span>
          </div>
          <span style="color: teal">  60 </span>
          <span style="color: #000000">
          </span>
          <br />
        </div>
        <p>
        </p>
        <p>
Lines 31 to 41 represent the client. For testing purposes I created a copy of the
domain with the suffix Client. In normal usage this would obviously not be necessary. 
<br />
The client remembers all the original values, which allows the server to build up
an efficient graph when it is time to attach.
</p>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=46346fcf-cd65-4493-a115-29dbd48fb645" />
      </body>
      <title>Inheritance support for EFContrib</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,46346fcf-cd65-4493-a115-29dbd48fb645.aspx</guid>
      <link>http://www.sitechno.com/Blog/InheritanceSupportForEFContrib.aspx</link>
      <pubDate>Wed, 16 Apr 2008 10:18:32 GMT</pubDate>
      <description>&lt;p&gt;
I first wanted to focus on the other aspects of EFContrib, but I finally sat down
and finished the last missing piece of &lt;a href="http://www.codeplex.com/efcontrib" target="_blank"&gt;EFContrib&lt;/a&gt;:
full inheritance support for both the server bits and the client bits.
&lt;/p&gt;
&lt;p&gt;
Most work was in the serialization actually, since the surrogate classes need to now
also serialize the properties of base types. 
&lt;/p&gt;
&lt;p&gt;
I'm working on a sample right now that will show off the system in WPF. But you can
check out some of the code in the test project. 
&lt;br /&gt;
This is the domain I'm using:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/InheritancesupportforEFContrib_AB70/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/InheritancesupportforEFContrib_AB70/image_thumb.png" width="140" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
In the following code I'm using it.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="background: #000000; color: #f2f0df; font-family: monospace"&gt;&lt;span style="color: teal"&gt;&amp;#160;
0 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;using&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;InheritanceTypeConnection&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;InheritanceTypeConnection&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;())&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 1 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 2 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;var&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; persons &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;from&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; p &lt;/span&gt;&lt;span style="color: #90ee90"&gt;in&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Person&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 3 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;select&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; p;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 4 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;foreach&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; p &lt;/span&gt;&lt;span style="color: #90ee90"&gt;in&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; persons)&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 5 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;DeleteObject(p);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 6 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 7 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;SaveChanges();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 8 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 9 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 10 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; MsgOnWire &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;String&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Empty;&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 11 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; id;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 12 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;using&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;InheritanceTypeConnection&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;InheritanceTypeConnection&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;())&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 13 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 14 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 15 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Einstein&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; lead &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Einstein&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; {
Firstname &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Bill&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
Lastname &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;G&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; };&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 16 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;AddToPerson(lead);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 17 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 18 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Mort&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; e1 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Mort&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; {
Firstname &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Ruurd&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
Lastname &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Boeke&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
Language &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;C#&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
EF&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #90ee90"&gt;true&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
WCF&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #90ee90"&gt;true&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
WF&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;true&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
WPF&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #90ee90"&gt;true&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
TeamLeader&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;lead
};&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 19 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;AddToPerson(e1);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 20 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 21 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Elvis&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; e2 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Elvis&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; {
Firstname &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Elvis&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
Lastname &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Presley&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
Language &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Java&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
EF &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
WCF &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;true&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
WF &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
WPF &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;true&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
TeamLeader &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; lead
};&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 22 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;AddToPerson(e2);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 23 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 24 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;SaveChanges();&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 25 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
id &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; e1&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;PersonID;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 26 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 27 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
MsgOnWire &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Serialize(e1);&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
we'll take mort as the graphroot (no importance)&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 28 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 29 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 30 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
deserialize&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 31 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;MortClient&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; mClient &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; MsgOnWire&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;DeserializeForClient&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;MortClient&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 32 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
mClient&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Firstname &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;changedAt&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;+&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff8080"&gt;DateTime&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Now&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;ToString();&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 33 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; nameToCheck &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; mClient&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Firstname;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 34 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
mClient&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;EF &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
mort tends to forget skills&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 35 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 36 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;EmployeeClient&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; teamlead &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; mClient&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;TeamLeader;&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 37 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 38 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
elvis is a free soul, he can not be managed.&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 39 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;ElvisClient&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; eClient &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;ElvisClient&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)
mClient&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;TeamLeader&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;TeamMembers&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Last();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 40 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
mClient&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;TeamLeader&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;TeamMembers&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Remove(eClient);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 41 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
eClient&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;TeamLeader &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;null&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 42 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 43 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
always add more einsteins in the mix&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 44 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;EinsteinClient&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; einClient &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;EinsteinClient&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; {
EF &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;true&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
WCF &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;true&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
WF &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
WPF &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
TeamLeader &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; teamlead,
Firstname &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Albert&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
Language &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;C#&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
Lastname &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Einstein&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; };&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 45 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
teamlead&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;TeamMembers&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Add(einClient);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 46 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 47 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 48 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
serialize&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 49 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
MsgOnWire &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; mClient&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;SerializeForClient();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 50 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 51 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 52 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;using&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;InheritanceTypeConnection&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;InheritanceTypeConnection&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;())&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 53 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 54 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 55 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
deserialize&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 56 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Mort&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; m &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Deserialize&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Mort&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(MsgOnWire);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 57 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 58 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;SaveChanges();&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 59 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 60 &lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt; 
&lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Lines 31 to 41 represent the client. For testing purposes I created a copy of the
domain with the suffix Client. In normal usage this would obviously not be necessary. 
&lt;br /&gt;
The client remembers all the original values, which allows the server to build up
an efficient graph when it is time to attach.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=46346fcf-cd65-4493-a115-29dbd48fb645" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,46346fcf-cd65-4493-a115-29dbd48fb645.aspx</comments>
      <category>EF (Entity Framework);EF-Contrib</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=cacc6a0f-40bc-4bbb-809f-22de4200dd80</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,cacc6a0f-40bc-4bbb-809f-22de4200dd80.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,cacc6a0f-40bc-4bbb-809f-22de4200dd80.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cacc6a0f-40bc-4bbb-809f-22de4200dd80</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have just <a href="http://www.codeplex.com/efcontrib" target="_blank">checked in
a sample application</a> that uses a server to retrieve data with EF and a client
that is totally unaware of EF. Changes on the client are changetracked and serialized
in a pretty xml format. Then, the server attaches to the graph and is able to use
a context to save changes. 
<br />
In this post I will explain some of the parts in more detail. I hope to follow up
on some point with a screencast. First, let's take a step back and look at the problem
(skip this if you've read my blog lately).
</p>
        <h5>Problems with N-Tier EF
</h5>
        <p>
Normal Entity Framework usage will generate classes for you that are adorned with
[DataMember] attributes, making them serializable using WCF's DataContractSerializer. 
<br />
The class that was generated has intimate knowledge of Entity Framework, which presents
itself as EF-specific tags in the XML: not pretty and not SOA at all!
</p>
        <p>
Further, on the receiving end (the client that deserializes these objects) those same
classes need to be around to deserialize into. This means that you will have to use
Entity Framework on the client: not SOA at all. This pretty much limits the usage
of your domain objects to a .Net client. (I'm not sure if Silverlight will be able
to use EF. If not: you will not be able to use these objects in Silverlight as well) 
</p>
        <p>
I probably pointed to <a href="http://blogs.msdn.com/dsimmons/archive/2008/03/02/more-about-how-to-fit-the-objectcontext-into-apps.aspx" target="_blank">this
post</a> before, but Daniel Simmons talks about using EF in your architecture. He
acknowledges the problem but does not see it as a very big issue. In some situations,
this might not be a big problem, but in others <strong>it is</strong>.
</p>
        <p>
Then, there is the issue of serializing the objects with all their relations in-tact.
It's harder than you would hope. Daniel again has a solution, that you can find <a href="http://blogs.msdn.com/dsimmons/archive/2008/01/28/entitybag-wrap-up-and-future-directions.aspx" target="_blank">here</a>.
He basically creates a serializable class (EntityBag) which groups all relations and
objects together and knows how to reassemble them. This way you can use your objects
on the client using EF and have a pretty seamless experience. Great!! However, it's
not going to work for other client technologies, so forget about SOA.
</p>
        <p>
Also: I prefer to work in a more 'agile'/'domain driven' way. Having a layer manifest
itself all the way up to the client, where it does not belong, really kills flexibility.
</p>
        <h5>Solution scope
</h5>
        <p>
My aim is to provide a solution that will allow me to:
</p>
        <ol>
          <li>
Work with POCO classes (as persistence ignorant as I can get) 
</li>
          <li>
No EF references on the client 
</li>
          <li>
Full changetracking on the client that can be attached easily 
</li>
          <li>
Use the same Domain classes (with it's logic and validation rules) on both server
and client: so no duplication of code 
</li>
        </ol>
        <p>
We should be able to work with our classes in Silverlight even.
</p>
        <h5>The Parts of the Solution
</h5>
        <p>
I have partitioned the solution into some smaller projects. All use <a href="http://www.postsharp.org/" target="_blank">PostSharp</a> to
do it's magic, but you will not notice a thing about it. (If you are unaware: PostSharp
will perform a step after compilation to transform your IL. This way, no source code
pollution).
</p>
        <p>
          <strong>POCO  (only on server)</strong>: 
</p>
        <ol>
          <li>
this project will enrich your domain objects with EF information, so there is no need
to litter your objects with EF specific. Feel the agile love. 
</li>
          <li>
has the ability to provide 'original values' to the serializer 
</li>
          <li>
has the ability/knowledge on how to attach a graph to an EF context 
</li>
        </ol>
        <p>
          <strong>Circular serializer (both on server as client)</strong>:
</p>
        <ol>
          <li>
creates surrogate objects that will be stand-ins during serialization. This fixes
the circular serialization problem. 
</li>
          <li>
also creates datamembers that will hold your original values during serialization 
</li>
          <li>
creates a method (CopyFromSurrogate) that allows the serializer to fill the original
object with values from the surrogate. 
</li>
        </ol>
        <p>
The circular serializer does more then just solve the circular serialization problem.
I might refactor this to make it clearer.
</p>
        <p>
          <strong>Editable Business Object (only on client)</strong>:
</p>
        <ol>
          <li>
this project implements IEditableObject (and INotifyPropertyChanged) on your domain
object 
</li>
          <li>
knows how to keep 'original values' and provide them to the serializer 
</li>
        </ol>
        <p>
Again, this project might be split.
</p>
        <p>
 
</p>
        <p>
So there are 3 different parts here. Let's look at that with a picture:
</p>
        <p>
          <a href="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/DisconnectedNTierobjectsusingEntityFrame_12D68/image_2.png">
            <img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="480" alt="image" src="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/DisconnectedNTierobjectsusingEntityFrame_12D68/image_thumb.png" width="554" border="0" />
          </a>
        </p>
        <p>
Basically, the circular serializer is the glue that is used on both the server and
the client. It knows how to serialize your objects and asks for help to get to the
original values. On the client, the EditableBusinessObject can provide that, on the
server, it is the original POCO project.
</p>
        <p>
Using them is dead simple, as I'll show.
</p>
        <h5>Look at some code
</h5>
        <p>
I've used the School database and let EF generate the entity mappings. I did not change
anything from the defaults, which basically means that the classes we end up with
are pretty awful. I don't care about them though for this sample. 
</p>
        <p>
          <a href="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/DisconnectedNTierobjectsusingEntityFrame_12D68/image_4.png">
            <img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="408" alt="image" src="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/DisconnectedNTierobjectsusingEntityFrame_12D68/image_thumb_1.png" width="640" border="0" />
          </a>
        </p>
        <p>
I then set the generated code to 'not compile' and created the following beautiful
classes by hand:
</p>
        <p>
        </p>
        <div style="BACKGROUND: #000000; COLOR: #f2f0df; FONT-FAMILY: monospace">
          <span style="COLOR: teal"> 
0 </span>
          <span style="COLOR: #90ee90">namespace</span>
          <span style="COLOR: #eeeeee"> Domain</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  1 </span>
            <span style="COLOR: #eeeeee">{</span>
          </div>
          <span style="COLOR: teal">  2 </span>
          <span style="COLOR: #eeeeee">[</span>
          <span style="COLOR: #ff0080">DataContract</span>
          <span style="COLOR: #eeeeee">(Name </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #00ffff">"Person"</span>
          <span style="COLOR: #eeeeee">,
Namespace </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #00ffff">"tstNS"</span>
          <span style="COLOR: #eeeeee">)]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  3 </span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #90ee90">class</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #ff0080">Person</span>
          </div>
          <span style="COLOR: teal">  4 </span>
          <span style="COLOR: #eeeeee">{</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  5 </span>
            <span style="COLOR: #eeeeee"> 
[</span>
            <span style="COLOR: #ff0080">DataMember</span>
            <span style="COLOR: #eeeeee">]</span>
          </div>
          <span style="COLOR: teal">  6 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">int</span>
          <span style="COLOR: #eeeeee"> PersonID
{ </span>
          <span style="COLOR: #90ee90">get</span>
          <span style="COLOR: #eeeeee">; </span>
          <span style="COLOR: #90ee90">set</span>
          <span style="COLOR: #eeeeee">;
}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  7 </span>
            <span style="COLOR: #eeeeee"> 
[</span>
            <span style="COLOR: #ff0080">DataMember</span>
            <span style="COLOR: #eeeeee">]</span>
          </div>
          <span style="COLOR: teal">  8 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">string</span>
          <span style="COLOR: #eeeeee"> LastName
{ </span>
          <span style="COLOR: #90ee90">get</span>
          <span style="COLOR: #eeeeee">; </span>
          <span style="COLOR: #90ee90">set</span>
          <span style="COLOR: #eeeeee">;
}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  9 </span>
            <span style="COLOR: #eeeeee"> 
[</span>
            <span style="COLOR: #ff0080">DataMember</span>
            <span style="COLOR: #eeeeee">]</span>
          </div>
          <span style="COLOR: teal">  10 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">string</span>
          <span style="COLOR: #eeeeee"> FirstName
{ </span>
          <span style="COLOR: #90ee90">get</span>
          <span style="COLOR: #eeeeee">; </span>
          <span style="COLOR: #90ee90">set</span>
          <span style="COLOR: #eeeeee">;
}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  11 </span>
            <span style="COLOR: #eeeeee"> 
[</span>
            <span style="COLOR: #ff0080">DataMember</span>
            <span style="COLOR: #eeeeee">]</span>
          </div>
          <span style="COLOR: teal">  12 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff8080">DateTime</span>
          <span style="COLOR: #c0c0c0">?</span>
          <span style="COLOR: #eeeeee"> HireDate
{ </span>
          <span style="COLOR: #90ee90">get</span>
          <span style="COLOR: #eeeeee">; </span>
          <span style="COLOR: #90ee90">set</span>
          <span style="COLOR: #eeeeee">;
}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  13 </span>
            <span style="COLOR: #eeeeee"> 
[</span>
            <span style="COLOR: #ff0080">DataMember</span>
            <span style="COLOR: #eeeeee">]</span>
          </div>
          <span style="COLOR: teal">  14 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff8080">DateTime</span>
          <span style="COLOR: #c0c0c0">?</span>
          <span style="COLOR: #eeeeee"> EnrollmentDate
{ </span>
          <span style="COLOR: #90ee90">get</span>
          <span style="COLOR: #eeeeee">; </span>
          <span style="COLOR: #90ee90">set</span>
          <span style="COLOR: #eeeeee">;
}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  15 </span>
          </div>
          <span style="COLOR: teal">  16 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  17 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #ff80c0">ICollection</span>
            <span style="COLOR: #c0c0c0">&lt;</span>
            <span style="COLOR: #ff0080">Enrollment</span>
            <span style="COLOR: #c0c0c0">&gt;</span>
            <span style="COLOR: #eeeeee"> Enrollments
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  18 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  19 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #ff80c0">ICollection</span>
            <span style="COLOR: #c0c0c0">&lt;</span>
            <span style="COLOR: #ff0080">Course</span>
            <span style="COLOR: #c0c0c0">&gt;</span>
            <span style="COLOR: #eeeeee"> Courses
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  20 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  21 </span>
            <span style="COLOR: #eeeeee">}</span>
          </div>
          <span style="COLOR: teal">  22 </span>
          <span style="COLOR: #eeeeee">
          </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  23 </span>
            <span style="COLOR: #eeeeee">[</span>
            <span style="COLOR: #ff0080">DataContract</span>
            <span style="COLOR: #eeeeee">(Name </span>
            <span style="COLOR: #c0c0c0">=</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #00ffff">"Course"</span>
            <span style="COLOR: #eeeeee">,
Namespace </span>
            <span style="COLOR: #c0c0c0">=</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #00ffff">"tstNS"</span>
            <span style="COLOR: #eeeeee">)]</span>
          </div>
          <span style="COLOR: teal">  24 </span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">class</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff0080">Course</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  25 </span>
            <span style="COLOR: #eeeeee">{</span>
          </div>
          <span style="COLOR: teal">  26 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  27 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #90ee90">int</span>
            <span style="COLOR: #eeeeee"> CourseID
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  28 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  29 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #90ee90">string</span>
            <span style="COLOR: #eeeeee"> Title
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  30 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  31 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #90ee90">string</span>
            <span style="COLOR: #eeeeee"> Days
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  32 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  33 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #ff8080">DateTime</span>
            <span style="COLOR: #eeeeee"> Time
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  34 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  35 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #90ee90">string</span>
            <span style="COLOR: #eeeeee"> Location
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  36 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  37 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #90ee90">int</span>
            <span style="COLOR: #eeeeee"> Credits
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  38 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  39 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #ff0080">Department</span>
            <span style="COLOR: #eeeeee"> Department
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  40 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  41 </span>
            <span style="COLOR: #eeeeee"> 
[</span>
            <span style="COLOR: #ff0080">DataMember</span>
            <span style="COLOR: #eeeeee">]</span>
          </div>
          <span style="COLOR: teal">  42 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff80c0">ICollection</span>
          <span style="COLOR: #c0c0c0">&lt;</span>
          <span style="COLOR: #ff0080">Enrollment</span>
          <span style="COLOR: #c0c0c0">&gt;</span>
          <span style="COLOR: #eeeeee"> Enrollments
{ </span>
          <span style="COLOR: #90ee90">get</span>
          <span style="COLOR: #eeeeee">; </span>
          <span style="COLOR: #90ee90">set</span>
          <span style="COLOR: #eeeeee">;
}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  43 </span>
            <span style="COLOR: #eeeeee"> 
[</span>
            <span style="COLOR: #ff0080">DataMember</span>
            <span style="COLOR: #eeeeee">]</span>
          </div>
          <span style="COLOR: teal">  44 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff80c0">ICollection</span>
          <span style="COLOR: #c0c0c0">&lt;</span>
          <span style="COLOR: #ff0080">Person</span>
          <span style="COLOR: #c0c0c0">&gt;</span>
          <span style="COLOR: #eeeeee"> Persons
{ </span>
          <span style="COLOR: #90ee90">get</span>
          <span style="COLOR: #eeeeee">; </span>
          <span style="COLOR: #90ee90">set</span>
          <span style="COLOR: #eeeeee">;
}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  45 </span>
          </div>
          <span style="COLOR: teal">  46 </span>
          <span style="COLOR: #eeeeee">}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  47 </span>
            <span style="COLOR: #eeeeee">[</span>
            <span style="COLOR: #ff0080">DataContract</span>
            <span style="COLOR: #eeeeee">(Name</span>
            <span style="COLOR: #c0c0c0">=</span>
            <span style="COLOR: #00ffff">"Department"</span>
            <span style="COLOR: #eeeeee">,
Namespace</span>
            <span style="COLOR: #c0c0c0">=</span>
            <span style="COLOR: #00ffff">"tstNS"</span>
            <span style="COLOR: #eeeeee">)]</span>
          </div>
          <span style="COLOR: teal">  48 </span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">class</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff0080">Department</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  49 </span>
            <span style="COLOR: #eeeeee">{</span>
          </div>
          <span style="COLOR: teal">  50 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  51 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #90ee90">int</span>
            <span style="COLOR: #eeeeee"> DepartmentID
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  52 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  53 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #90ee90">string</span>
            <span style="COLOR: #eeeeee"> Name
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  54 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  55 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #ff8080">Decimal</span>
            <span style="COLOR: #eeeeee"> Budget
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  56 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  57 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #ff8080">DateTime</span>
            <span style="COLOR: #eeeeee"> StartDate
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  58 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  59 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #90ee90">int</span>
            <span style="COLOR: #eeeeee"> Administrator
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  60 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  61 </span>
            <span style="COLOR: #eeeeee"> 
[</span>
            <span style="COLOR: #ff0080">DataMember</span>
            <span style="COLOR: #eeeeee">]</span>
          </div>
          <span style="COLOR: teal">  62 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff80c0">ICollection</span>
          <span style="COLOR: #c0c0c0">&lt;</span>
          <span style="COLOR: #ff0080">Course</span>
          <span style="COLOR: #c0c0c0">&gt;</span>
          <span style="COLOR: #eeeeee"> Courses
{ </span>
          <span style="COLOR: #90ee90">get</span>
          <span style="COLOR: #eeeeee">; </span>
          <span style="COLOR: #90ee90">set</span>
          <span style="COLOR: #eeeeee">;
}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  63 </span>
          </div>
          <span style="COLOR: teal">  64 </span>
          <span style="COLOR: #eeeeee">}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  65 </span>
            <span style="COLOR: #eeeeee">[</span>
            <span style="COLOR: #ff0080">DataContract</span>
            <span style="COLOR: #eeeeee">(Name </span>
            <span style="COLOR: #c0c0c0">=</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #00ffff">"Enrollment"</span>
            <span style="COLOR: #eeeeee">,
Namespace </span>
            <span style="COLOR: #c0c0c0">=</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #00ffff">"tstNS"</span>
            <span style="COLOR: #eeeeee">)]</span>
          </div>
          <span style="COLOR: teal">  66 </span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">class</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff0080">Enrollment</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  67 </span>
            <span style="COLOR: #eeeeee">{</span>
          </div>
          <span style="COLOR: teal">  68 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  69 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #90ee90">int</span>
            <span style="COLOR: #eeeeee"> EnrollmentID
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  70 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">DataMember</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  71 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #ff8080">Decimal</span>
            <span style="COLOR: #c0c0c0">?</span>
            <span style="COLOR: #eeeeee"> Grade
{ </span>
            <span style="COLOR: #90ee90">get</span>
            <span style="COLOR: #eeeeee">; </span>
            <span style="COLOR: #90ee90">set</span>
            <span style="COLOR: #eeeeee">;
}</span>
          </div>
          <span style="COLOR: teal">  72 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  73 </span>
            <span style="COLOR: #eeeeee"> 
[</span>
            <span style="COLOR: #ff0080">DataMember</span>
            <span style="COLOR: #eeeeee">]</span>
          </div>
          <span style="COLOR: teal">  74 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff0080">Course</span>
          <span style="COLOR: #eeeeee"> Course
{ </span>
          <span style="COLOR: #90ee90">get</span>
          <span style="COLOR: #eeeeee">; </span>
          <span style="COLOR: #90ee90">set</span>
          <span style="COLOR: #eeeeee">;
}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  75 </span>
            <span style="COLOR: #eeeeee"> 
[</span>
            <span style="COLOR: #ff0080">DataMember</span>
            <span style="COLOR: #eeeeee">]</span>
          </div>
          <span style="COLOR: teal">  76 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff0080">Person</span>
          <span style="COLOR: #eeeeee"> Person
{ </span>
          <span style="COLOR: #90ee90">get</span>
          <span style="COLOR: #eeeeee">; </span>
          <span style="COLOR: #90ee90">set</span>
          <span style="COLOR: #eeeeee">;
}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  77 </span>
          </div>
          <span style="COLOR: teal">  78 </span>
          <span style="COLOR: #eeeeee">}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  79 </span>
            <span style="COLOR: #eeeeee">}</span>
          </div>
          <span style="COLOR: teal">  80 </span>
          <span style="COLOR: #000000">
          </span>
          <br />
        </div>
        <p>
        </p>
        <p>
Now, I need a trick to get seperate versions of this on the client and the server. <em>I
altered the msbuild script to add a conditional compile symbol that is the name of
the solution.</em> You could go fancy with this technique, by matching the build name
and stuff. I just used this:
</p>
        <pre>
          <pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">
            <span style="COLOR: blue">&lt;</span>
            <span style="COLOR: maroon">PropertyGroup</span>
            <span style="COLOR: blue">&gt;</span>
          </pre>
          <pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none">
            <span style="COLOR: blue">&lt;</span>
            <span style="COLOR: maroon">DefineConstants</span>
            <span style="COLOR: blue">&gt;</span>$(DefineConstants);$(SolutionName)<span style="COLOR: blue">&lt;</span>/<span style="COLOR: maroon">DefineConstants</span><span style="COLOR: blue">&gt;</span></pre>
          <span style="COLOR: blue">&lt;</span>/<span style="COLOR: maroon">PropertyGroup</span><span style="COLOR: blue">&gt;</span></pre>
        <p>
          <strong>(Please let me know when someone uses this technique to target both Silverlight
and regular .net. It's possible!) 
<br /></strong>So, now it's time to apply our postsharp attributes. I did that in the assembly
info file:
</p>
        <div style="FONT-FAMILY: courier new">
          <pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">
            <span style="COLOR: blue">#if</span> Server</pre>
          <pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none">[assembly: Poco(<span style="COLOR: maroon">"SchoolEntitiesConnection"</span>,
AttributeTargetAssemblies = <span style="COLOR: maroon">"Domain"</span>, AttributeTargetTypes
= <span style="COLOR: maroon">"Domain.*"</span>)]</pre>
          <pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">[assembly: CreateSerializeSurrogate(<span style="COLOR: maroon">"EntityFrameworkContrib.PostSharp4EF.ISerializationHelp,
EntityFrameworkContrib.PostSharp4EF"</span>, AttributeTargetAssemblies = <span style="COLOR: maroon">"Domain"</span>,
AttributeTargetTypes = <span style="COLOR: maroon">"Domain.*"</span>)]</pre>
          <pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none">
            <span style="COLOR: blue">#endif</span>
          </pre>
          <pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">
            <span style="COLOR: blue">#if</span> Client</pre>
          <pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none">[assembly: EditableBusinessObjectAttribute(AttributeTargetAssemblies=<span style="COLOR: maroon">"Domain"</span>,
AttributeTargetTypes=<span style="COLOR: maroon">"Domain.*"</span>)]</pre>
          <pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">[assembly: CreateSerializeSurrogate(<span style="COLOR: maroon">"EditableBusinessObjects.Postsharp.Public.IEditableBusinessObject,
EditableBusinessObjects.Postsharp.Public"</span>, AttributeTargetAssemblies=<span style="COLOR: maroon">"Domain"</span>,
AttributeTargetTypes=<span style="COLOR: maroon">"Domain.*"</span>)]</pre>
          <span style="COLOR: blue">#endif</span>
        </div>
        <p>
Pretty neat, isn't it? This notifies postsharp to either use Poco or EditableBusinessObject
to modify the compiled code. I only have one place to maintain this code. 
<br />
As you can see, the circular serialize (CreateSerializeSurrogate) takes the name of
a type that it can use to get 'original value' information from.
</p>
        <p>
I also created an interface project (just a nice best-practice) to identify my operation
contract:
</p>
        <p>
        </p>
        <div style="BACKGROUND: #000000; COLOR: #f2f0df; FONT-FAMILY: monospace">
          <span style="COLOR: teal"> 
0 </span>
          <span style="COLOR: #eeeeee">[</span>
          <span style="COLOR: #ff0080">CircularReferenceSurrogateAttribute</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  1 </span>
            <span style="COLOR: #eeeeee">[</span>
            <span style="COLOR: #ff0080">ServiceContract</span>
            <span style="COLOR: #eeeeee">(Namespace</span>
            <span style="COLOR: #c0c0c0">=</span>
            <span style="COLOR: #00ffff">"Http://sitechno.School"</span>
            <span style="COLOR: #eeeeee">)]</span>
          </div>
          <span style="COLOR: teal">  2 </span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">interface</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff80c0">ISchoolService</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  3 </span>
            <span style="COLOR: #eeeeee">{</span>
          </div>
          <span style="COLOR: teal">  4 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">OperationContract</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  5 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #ff0080">Person</span>
            <span style="COLOR: #eeeeee"> GetPerson(</span>
            <span style="COLOR: #90ee90">int</span>
            <span style="COLOR: #eeeeee"> id, </span>
            <span style="COLOR: #90ee90">bool</span>
            <span style="COLOR: #eeeeee"> fetchEnrollments, </span>
            <span style="COLOR: #90ee90">bool</span>
            <span style="COLOR: #eeeeee"> fetchCourses);</span>
          </div>
          <span style="COLOR: teal">  6 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  7 </span>
            <span style="COLOR: #eeeeee"> 
[</span>
            <span style="COLOR: #ff0080">OperationContract</span>
            <span style="COLOR: #eeeeee">]</span>
          </div>
          <span style="COLOR: teal">  8 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">void</span>
          <span style="COLOR: #eeeeee"> SavePerson(</span>
          <span style="COLOR: #ff0080">Person</span>
          <span style="COLOR: #eeeeee"> person);</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  9 </span>
          </div>
          <span style="COLOR: teal">  10 </span>
          <span style="COLOR: #eeeeee">  [</span>
          <span style="COLOR: #ff0080">OperationContract</span>
          <span style="COLOR: #eeeeee">]</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  11 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #ff80c0">IList</span>
            <span style="COLOR: #c0c0c0">&lt;</span>
            <span style="COLOR: #ff0080">Course</span>
            <span style="COLOR: #c0c0c0">&gt;</span>
            <span style="COLOR: #eeeeee"> GetCourses();</span>
          </div>
          <span style="COLOR: teal">  12 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  13 </span>
            <span style="COLOR: #eeeeee"> 
[</span>
            <span style="COLOR: #ff0080">OperationContract</span>
            <span style="COLOR: #eeeeee">]</span>
          </div>
          <span style="COLOR: teal">  14 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #ff80c0">IList</span>
          <span style="COLOR: #c0c0c0">&lt;</span>
          <span style="COLOR: #ff0080">Department</span>
          <span style="COLOR: #c0c0c0">&gt;</span>
          <span style="COLOR: #eeeeee"> GetDepartments();</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  15 </span>
          </div>
          <span style="COLOR: teal">  16 </span>
          <span style="COLOR: #eeeeee">}</span>
          <br />
        </div>
        <p>
        </p>
        <p>
See the CircularReferenceSurrogateAttribute on line 0: it applies a datacontract surrogate
manager, that will substitute surrogate types for the real types during serialization.
</p>
        <p>
Now, for the server:
</p>
        <p>
        </p>
        <div style="BACKGROUND: #000000; COLOR: #f2f0df; FONT-FAMILY: monospace">
          <span style="COLOR: teal"> 
0 </span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">class</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff0080">SchoolService</span>
          <span style="COLOR: #eeeeee"> : </span>
          <span style="COLOR: #ff80c0">ISchoolService</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  1 </span>
            <span style="COLOR: #eeeeee">{</span>
          </div>
          <span style="COLOR: teal">  2 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff0080">Person</span>
          <span style="COLOR: #eeeeee"> GetPerson(</span>
          <span style="COLOR: #90ee90">int</span>
          <span style="COLOR: #eeeeee"> id, </span>
          <span style="COLOR: #90ee90">bool</span>
          <span style="COLOR: #eeeeee"> fetchEnrollments, </span>
          <span style="COLOR: #90ee90">bool</span>
          <span style="COLOR: #eeeeee"> fetchCourses)</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  3 </span>
            <span style="COLOR: #eeeeee"> 
{</span>
          </div>
          <span style="COLOR: teal">  4 </span>
          <span style="COLOR: #eeeeee">   </span>
          <span style="COLOR: #90ee90">using</span>
          <span style="COLOR: #eeeeee"> (</span>
          <span style="COLOR: #ff0080">SchoolContext</span>
          <span style="COLOR: #eeeeee"> context </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">new</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff0080">SchoolContext</span>
          <span style="COLOR: #eeeeee">())</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  5 </span>
            <span style="COLOR: #eeeeee">  
{</span>
          </div>
          <span style="COLOR: teal">  6 </span>
          <span style="COLOR: #eeeeee">    </span>
          <span style="COLOR: #ff0080">Person</span>
          <span style="COLOR: #eeeeee"> p </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> (</span>
          <span style="COLOR: #90ee90">from</span>
          <span style="COLOR: #eeeeee"> person </span>
          <span style="COLOR: #90ee90">in</span>
          <span style="COLOR: #eeeeee"> context</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Person</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  7 </span>
            <span style="COLOR: #eeeeee">       </span>
            <span style="COLOR: #90ee90">where</span>
            <span style="COLOR: #eeeeee"> person</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">PersonID  </span>
            <span style="COLOR: #c0c0c0">==</span>
            <span style="COLOR: #eeeeee"> id</span>
          </div>
          <span style="COLOR: teal">  8 </span>
          <span style="COLOR: #eeeeee">          </span>
          <span style="COLOR: #90ee90">select</span>
          <span style="COLOR: #eeeeee"> person)</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">First();</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  9 </span>
          </div>
          <span style="COLOR: teal">  10 </span>
          <span style="COLOR: #eeeeee">    </span>
          <span style="COLOR: #90ee90">if</span>
          <span style="COLOR: #eeeeee"> (fetchEnrollments)</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  11 </span>
            <span style="COLOR: #eeeeee">   
{</span>
          </div>
          <span style="COLOR: teal">  12 </span>
          <span style="COLOR: #eeeeee">    
((</span>
          <span style="COLOR: #ff80c0">IRelationshipLoader</span>
          <span style="COLOR: #eeeeee">)p)</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Load(</span>
          <span style="COLOR: #00ffff">"Enrollments"</span>
          <span style="COLOR: #eeeeee">);</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  13 </span>
            <span style="COLOR: #eeeeee">     </span>
            <span style="COLOR: #90ee90">foreach</span>
            <span style="COLOR: #eeeeee"> (</span>
            <span style="COLOR: #ff0080">Enrollment</span>
            <span style="COLOR: #eeeeee"> r </span>
            <span style="COLOR: #90ee90">in</span>
            <span style="COLOR: #eeeeee"> p</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">Enrollments)</span>
          </div>
          <span style="COLOR: teal">  14 </span>
          <span style="COLOR: #eeeeee">    
{</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  15 </span>
            <span style="COLOR: #eeeeee">     
((</span>
            <span style="COLOR: #ff80c0">IRelationshipLoader</span>
            <span style="COLOR: #eeeeee">)r)</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">Load(</span>
            <span style="COLOR: #00ffff">"Course"</span>
            <span style="COLOR: #eeeeee">);</span>
          </div>
          <span style="COLOR: teal">  16 </span>
          <span style="COLOR: #eeeeee">     
((</span>
          <span style="COLOR: #ff80c0">IRelationshipLoader</span>
          <span style="COLOR: #eeeeee">)r)</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Load(</span>
          <span style="COLOR: #00ffff">"Person"</span>
          <span style="COLOR: #eeeeee">);</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  17 </span>
            <span style="COLOR: #eeeeee">    
}</span>
          </div>
          <span style="COLOR: teal">  18 </span>
          <span style="COLOR: #eeeeee">   
}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  19 </span>
            <span style="COLOR: #eeeeee">    </span>
          </div>
          <span style="COLOR: teal">  20 </span>
          <span style="COLOR: #eeeeee">    </span>
          <span style="COLOR: #90ee90">if</span>
          <span style="COLOR: #eeeeee"> (fetchCourses)</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  21 </span>
            <span style="COLOR: #eeeeee">   
{</span>
          </div>
          <span style="COLOR: teal">  22 </span>
          <span style="COLOR: #eeeeee">    
((</span>
          <span style="COLOR: #ff80c0">IRelationshipLoader</span>
          <span style="COLOR: #eeeeee">)p)</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Load(</span>
          <span style="COLOR: #00ffff">"Courses"</span>
          <span style="COLOR: #eeeeee">);</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  23 </span>
            <span style="COLOR: #eeeeee">     </span>
            <span style="COLOR: #90ee90">foreach</span>
            <span style="COLOR: #eeeeee"> (</span>
            <span style="COLOR: #ff0080">Course</span>
            <span style="COLOR: #eeeeee"> c </span>
            <span style="COLOR: #90ee90">in</span>
            <span style="COLOR: #eeeeee"> p</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">Courses)</span>
          </div>
          <span style="COLOR: teal">  24 </span>
          <span style="COLOR: #eeeeee">    
{</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  25 </span>
            <span style="COLOR: #eeeeee">     
((</span>
            <span style="COLOR: #ff80c0">IRelationshipLoader</span>
            <span style="COLOR: #eeeeee">)c)</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">Load(</span>
            <span style="COLOR: #00ffff">"Department"</span>
            <span style="COLOR: #eeeeee">);</span>
          </div>
          <span style="COLOR: teal">  26 </span>
          <span style="COLOR: #eeeeee">     
((</span>
          <span style="COLOR: #ff80c0">IRelationshipLoader</span>
          <span style="COLOR: #eeeeee">)c)</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Load(</span>
          <span style="COLOR: #00ffff">"Enrollments"</span>
          <span style="COLOR: #eeeeee">);</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  27 </span>
            <span style="COLOR: #eeeeee">     
((</span>
            <span style="COLOR: #ff80c0">IRelationshipLoader</span>
            <span style="COLOR: #eeeeee">)c)</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">Load(</span>
            <span style="COLOR: #00ffff">"Persons"</span>
            <span style="COLOR: #eeeeee">);</span>
          </div>
          <span style="COLOR: teal">  28 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  29 </span>
            <span style="COLOR: #eeeeee">    
}</span>
          </div>
          <span style="COLOR: teal">  30 </span>
          <span style="COLOR: #eeeeee">   
}</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  31 </span>
          </div>
          <span style="COLOR: teal">  32 </span>
          <span style="COLOR: #eeeeee">   
((</span>
          <span style="COLOR: #ff80c0">IContextAware</span>
          <span style="COLOR: #eeeeee">)p)</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">CreateSerializableState(context);</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  33 </span>
          </div>
          <span style="COLOR: teal">  34 </span>
          <span style="COLOR: #eeeeee">    </span>
          <span style="COLOR: #90ee90">return</span>
          <span style="COLOR: #eeeeee"> p;</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  35 </span>
            <span style="COLOR: #eeeeee">  
}</span>
          </div>
          <span style="COLOR: teal">  36 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  37 </span>
            <span style="COLOR: #eeeeee"> 
}</span>
          </div>
          <span style="COLOR: teal">  38 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  39 </span>
          </div>
          <span style="COLOR: teal">  40 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">void</span>
          <span style="COLOR: #eeeeee"> SavePerson(</span>
          <span style="COLOR: #ff0080">Person</span>
          <span style="COLOR: #eeeeee"> person)</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  41 </span>
            <span style="COLOR: #eeeeee"> 
{</span>
          </div>
          <span style="COLOR: teal">  42 </span>
          <span style="COLOR: #eeeeee">   </span>
          <span style="COLOR: #90ee90">using</span>
          <span style="COLOR: #eeeeee"> (</span>
          <span style="COLOR: #ff0080">SchoolContext</span>
          <span style="COLOR: #eeeeee"> context </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">new</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff0080">SchoolContext</span>
          <span style="COLOR: #eeeeee">())</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  43 </span>
            <span style="COLOR: #eeeeee">  
{</span>
          </div>
          <span style="COLOR: teal">  44 </span>
          <span style="COLOR: #eeeeee">   
((</span>
          <span style="COLOR: #ff80c0">IContextAware</span>
          <span style="COLOR: #eeeeee">)person)</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">AttachGraphToContext(context,
entity </span>
          <span style="COLOR: #c0c0c0">=&gt;</span>
          <span style="COLOR: #eeeeee"> entity</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">GetType()</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Name);</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  45 </span>
          </div>
          <span style="COLOR: teal">  46 </span>
          <span style="COLOR: #eeeeee">   
context</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">SaveChanges();</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  47 </span>
            <span style="COLOR: #eeeeee">  
}</span>
          </div>
          <span style="COLOR: teal">  48 </span>
          <span style="COLOR: #eeeeee">  }</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  49 </span>
          </div>
          <span style="COLOR: teal">  50 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  51 </span>
            <span style="COLOR: #eeeeee">  </span>
            <span style="COLOR: #90ee90">public</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #ff80c0">IList</span>
            <span style="COLOR: #c0c0c0">&lt;</span>
            <span style="COLOR: #ff0080">Course</span>
            <span style="COLOR: #c0c0c0">&gt;</span>
            <span style="COLOR: #eeeeee"> GetCourses()</span>
          </div>
          <span style="COLOR: teal">  52 </span>
          <span style="COLOR: #eeeeee">  {</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  53 </span>
            <span style="COLOR: #eeeeee">   </span>
            <span style="COLOR: #90ee90">using</span>
            <span style="COLOR: #eeeeee"> (</span>
            <span style="COLOR: #ff0080">SchoolContext</span>
            <span style="COLOR: #eeeeee"> context </span>
            <span style="COLOR: #c0c0c0">=</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #90ee90">new</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #ff0080">SchoolContext</span>
            <span style="COLOR: #eeeeee">())</span>
          </div>
          <span style="COLOR: teal">  54 </span>
          <span style="COLOR: #eeeeee">  
{</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  55 </span>
            <span style="COLOR: #eeeeee">    </span>
            <span style="COLOR: #ff0080">List</span>
            <span style="COLOR: #c0c0c0">&lt;</span>
            <span style="COLOR: #ff0080">Course</span>
            <span style="COLOR: #c0c0c0">&gt;</span>
            <span style="COLOR: #eeeeee"> courses </span>
            <span style="COLOR: #c0c0c0">=</span>
            <span style="COLOR: #eeeeee"> context</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">Course</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">ToList();</span>
          </div>
          <span style="COLOR: teal">  56 </span>
          <span style="COLOR: #eeeeee">   
courses</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">ForEach(crs </span>
          <span style="COLOR: #c0c0c0">=&gt;</span>
          <span style="COLOR: #eeeeee"> ((</span>
          <span style="COLOR: #ff80c0">IContextAware</span>
          <span style="COLOR: #eeeeee">)crs)</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">CreateSerializableState(context));</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  57 </span>
            <span style="COLOR: #eeeeee">    </span>
            <span style="COLOR: #90ee90">return</span>
            <span style="COLOR: #eeeeee"> courses;</span>
          </div>
          <span style="COLOR: teal">  58 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  59 </span>
            <span style="COLOR: #eeeeee">  
}</span>
          </div>
          <span style="COLOR: teal">  60 </span>
          <span style="COLOR: #eeeeee">  }</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  61 </span>
          </div>
          <span style="COLOR: teal">  62 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">public</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff80c0">IList</span>
          <span style="COLOR: #c0c0c0">&lt;</span>
          <span style="COLOR: #ff0080">Department</span>
          <span style="COLOR: #c0c0c0">&gt;</span>
          <span style="COLOR: #eeeeee"> GetDepartments()</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  63 </span>
            <span style="COLOR: #eeeeee"> 
{</span>
          </div>
          <span style="COLOR: teal">  64 </span>
          <span style="COLOR: #eeeeee">   </span>
          <span style="COLOR: #90ee90">using</span>
          <span style="COLOR: #eeeeee"> (</span>
          <span style="COLOR: #ff0080">SchoolContext</span>
          <span style="COLOR: #eeeeee"> context </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">new</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff0080">SchoolContext</span>
          <span style="COLOR: #eeeeee">())</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  65 </span>
            <span style="COLOR: #eeeeee">  
{</span>
          </div>
          <span style="COLOR: teal">  66 </span>
          <span style="COLOR: #eeeeee">    </span>
          <span style="COLOR: #ff0080">List</span>
          <span style="COLOR: #c0c0c0">&lt;</span>
          <span style="COLOR: #ff0080">Department</span>
          <span style="COLOR: #c0c0c0">&gt;</span>
          <span style="COLOR: #eeeeee"> deps </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> context</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Department</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">ToList();</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  67 </span>
            <span style="COLOR: #eeeeee">   
deps</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">ForEach(dp </span>
            <span style="COLOR: #c0c0c0">=&gt;</span>
            <span style="COLOR: #eeeeee"> ((</span>
            <span style="COLOR: #ff80c0">IContextAware</span>
            <span style="COLOR: #eeeeee">)dp)</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">CreateSerializableState(context));</span>
          </div>
          <span style="COLOR: teal">  68 </span>
          <span style="COLOR: #eeeeee">    </span>
          <span style="COLOR: #90ee90">return</span>
          <span style="COLOR: #eeeeee"> deps;</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  69 </span>
            <span style="COLOR: #eeeeee">  
}</span>
          </div>
          <span style="COLOR: teal">  70 </span>
          <span style="COLOR: #eeeeee">  }</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  71 </span>
          </div>
          <span style="COLOR: teal">  72 </span>
          <span style="COLOR: #eeeeee">}</span>
          <br />
        </div>
        <p>
        </p>
        <p>
Before someone tells me that I'm not doing the includes/spans correctly in the GetPerson
method: I'll do it better when I do a more complete sample. 
</p>
        <p>
As you can see, for methods that return classes, I call the CreateSerializableState
method. Methods that accept a graph have to call the AttachGraphToContext method.
Obviously, these can and should be context extensibility methods. 
</p>
        <ul>
          <li>
The CreateSerializableState method will use the context to get the 'original' values
and load them into your object. Your class actually has fields to hold this information
(as created by Poco). 
</li>
          <li>
The AttachGraphToContext method is quite complex and will look at a graph and it's
original values. It will first set the original values, than do an acceptchanges and
change only those properties that were actually changed. It also fixes up relationships,
using add/attach/delete. 
</li>
        </ul>
        <p>
The client:
</p>
        <p>
        </p>
        <div style="BACKGROUND: #000000; COLOR: #f2f0df; FONT-FAMILY: monospace">
          <span style="COLOR: teal"> 
0 </span>
          <span style="COLOR: #eeeeee">  </span>
          <span style="COLOR: #90ee90">static</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">void</span>
          <span style="COLOR: #eeeeee"> Main(</span>
          <span style="COLOR: #90ee90">string</span>
          <span style="COLOR: #eeeeee">[]
args)</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  1 </span>
            <span style="COLOR: #eeeeee"> 
{</span>
          </div>
          <span style="COLOR: teal">  2 </span>
          <span style="COLOR: #eeeeee">   </span>
          <span style="COLOR: #ff0080">SchoolService</span>
          <span style="COLOR: #eeeeee"> svc </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">new</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff0080">SchoolService</span>
          <span style="COLOR: #eeeeee">();</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  3 </span>
          </div>
          <span style="COLOR: teal">  4 </span>
          <span style="COLOR: #eeeeee">   </span>
          <span style="COLOR: #ff80c0">IList</span>
          <span style="COLOR: #c0c0c0">&lt;</span>
          <span style="COLOR: #ff0080">Department</span>
          <span style="COLOR: #c0c0c0">&gt;</span>
          <span style="COLOR: #eeeeee"> departments </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> svc</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">GetDepartments();</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  5 </span>
          </div>
          <span style="COLOR: teal">  6 </span>
          <span style="COLOR: #eeeeee">   </span>
          <span style="COLOR: #ff0080">Person</span>
          <span style="COLOR: #eeeeee"> Fadi </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> svc</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">GetPerson(</span>
          <span style="COLOR: #00ffff">4</span>
          <span style="COLOR: #eeeeee">, </span>
          <span style="COLOR: #90ee90">false</span>
          <span style="COLOR: #eeeeee">, </span>
          <span style="COLOR: #90ee90">false</span>
          <span style="COLOR: #eeeeee">);</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  7 </span>
          </div>
          <span style="COLOR: teal">  8 </span>
          <span style="COLOR: #eeeeee">   </span>
          <span style="COLOR: #ff0080">Console</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">WriteLine(</span>
          <span style="COLOR: #ff0080">String</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Format(</span>
          <span style="COLOR: #00ffff">"Working
on {0} {1}, Hired at {2:D}"</span>
          <span style="COLOR: #eeeeee">,</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  9 </span>
            <span style="COLOR: #eeeeee">   
Fadi</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">FirstName,
Fadi</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">LastName,
Fadi</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">HireDate));</span>
          </div>
          <span style="COLOR: teal">  10 </span>
          <span style="COLOR: #eeeeee">   </span>
          <span style="COLOR: #ff0080">Console</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">WriteLine();</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  11 </span>
          </div>
          <span style="COLOR: teal">  12 </span>
          <span style="COLOR: #eeeeee">   </span>
          <span style="COLOR: #ff0080">Console</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">WriteLine(</span>
          <span style="COLOR: #00ffff">"The
ID is not generated by the database in this instance, so please give me a number that
is not used already"</span>
          <span style="COLOR: #eeeeee">);</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  13 </span>
            <span style="COLOR: #eeeeee">   </span>
            <span style="COLOR: #90ee90">int</span>
            <span style="COLOR: #eeeeee"> id </span>
            <span style="COLOR: #c0c0c0">=</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #ff8080">Int32</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">Parse(</span>
            <span style="COLOR: #ff0080">Console</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">ReadLine());</span>
          </div>
          <span style="COLOR: teal">  14 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  15 </span>
            <span style="COLOR: #eeeeee">   </span>
            <span style="COLOR: #ff0080">Console</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">WriteLine(</span>
            <span style="COLOR: #00ffff">"I
can bug you for a title as well, can't I?"</span>
            <span style="COLOR: #eeeeee">);</span>
          </div>
          <span style="COLOR: teal">  16 </span>
          <span style="COLOR: #eeeeee">   </span>
          <span style="COLOR: #90ee90">string</span>
          <span style="COLOR: #eeeeee"> title </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff0080">Console</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">ReadLine();</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  17 </span>
          </div>
          <span style="COLOR: teal">  18 </span>
          <span style="COLOR: #eeeeee">   </span>
          <span style="COLOR: #ff0080">Course</span>
          <span style="COLOR: #eeeeee"> newCourse </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">new</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff0080">Course</span>
          <span style="COLOR: #eeeeee"> {
CourseID </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> id,
Credits </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #00ffff">10</span>
          <span style="COLOR: #eeeeee">,
Days </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #00ffff">"MT"</span>
          <span style="COLOR: #eeeeee">,
Time </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff8080">DateTime</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Now,
Title </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> title
};</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  19 </span>
            <span style="COLOR: #eeeeee">  
newCourse</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">Persons </span>
            <span style="COLOR: #c0c0c0">=</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #90ee90">new</span>
            <span style="COLOR: #eeeeee"> </span>
            <span style="COLOR: #ff0080">List</span>
            <span style="COLOR: #c0c0c0">&lt;</span>
            <span style="COLOR: #ff0080">Person</span>
            <span style="COLOR: #c0c0c0">&gt;</span>
            <span style="COLOR: #eeeeee"> {
Fadi }; </span>
            <span style="COLOR: #a4a4a4">// normally, your object ctor would have
done this</span>
          </div>
          <span style="COLOR: teal">  20 </span>
          <span style="COLOR: #eeeeee">  
newCourse</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Enrollments </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #90ee90">new</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff0080">List</span>
          <span style="COLOR: #c0c0c0">&lt;</span>
          <span style="COLOR: #ff0080">Enrollment</span>
          <span style="COLOR: #c0c0c0">&gt;</span>
          <span style="COLOR: #eeeeee">();</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  21 </span>
            <span style="COLOR: #eeeeee">  
newCourse</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">Department </span>
            <span style="COLOR: #c0c0c0">=</span>
            <span style="COLOR: #eeeeee"> departments</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">First();</span>
          </div>
          <span style="COLOR: teal">  22 </span>
          <span style="COLOR: #eeeeee">  
newCourse</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Department</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Courses</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Add(newCourse);</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  23 </span>
          </div>
          <span style="COLOR: teal">  24 </span>
          <span style="COLOR: #eeeeee">  
Fadi</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">FirstName </span>
          <span style="COLOR: #c0c0c0">=</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #00ffff">"Fadi,Changed
at "</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #c0c0c0">+</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #ff8080">DateTime</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Now</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">ToShortTimeString();</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  25 </span>
          </div>
          <span style="COLOR: teal">  26 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  27 </span>
            <span style="COLOR: #eeeeee">  
Fadi</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">Courses</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">Add(newCourse);</span>
          </div>
          <span style="COLOR: teal">  28 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  29 </span>
          </div>
          <span style="COLOR: teal">  30 </span>
          <span style="COLOR: #eeeeee">  
svc</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">SavePerson(Fadi);</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  31 </span>
          </div>
          <span style="COLOR: teal">  32 </span>
          <span style="COLOR: #eeeeee">   </span>
          <span style="COLOR: #ff0080">Console</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">WriteLine(</span>
          <span style="COLOR: #00ffff">"Finished,
go check your database. I added the new course to department:"</span>
          <span style="COLOR: #eeeeee"> </span>
          <span style="COLOR: #c0c0c0">+</span>
          <span style="COLOR: #eeeeee"> newCourse</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Department</span>
          <span style="COLOR: #c0c0c0">.</span>
          <span style="COLOR: #eeeeee">Name);</span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  33 </span>
            <span style="COLOR: #eeeeee">   </span>
            <span style="COLOR: #ff0080">Console</span>
            <span style="COLOR: #c0c0c0">.</span>
            <span style="COLOR: #eeeeee">ReadLine();</span>
          </div>
          <span style="COLOR: teal">  34 </span>
          <br />
          <div style="BACKGROUND: #222222">
            <span style="COLOR: teal">  35 </span>
          </div>
          <span style="COLOR: teal">  36 </span>
          <span style="COLOR: #eeeeee">  }</span>
          <br />
        </div>
        <p>
        </p>
        <p>
One important thing to know is that on the client, there is no longer a concept of
relations, only lists. So you will need to hook up classes from both angles when you
connect them: see lines 21 and 22.
</p>
        <h5>Things to note
</h5>
        <ul>
          <li>
There is a LOT going on, but you are shielded from it and can work in a blissful persistence
ignorance way! 
</li>
          <li>
Your objects will implement quite a few interfaces that you can use if you'd like 
</li>
          <li>
The client side implements INotifyPropertyChanged (and raises events correctly) but
the ICollection implementations are still just Lists&lt;&gt;. I will change that to
ObservableCollections for you WPF lovers! (which includes me) 
</li>
          <li>
I have not implemented deleting yet. So you can unhook a relationship, but that does
not delete the object. I don't think that it should either! I will probably implement
some 'MarkAsDelete' method on the client-side 
</li>
          <li>
There is a strong optimization for speed. I, for instance, generate a method 'SetValue(string
propname, object val)' and corresponding GetValue so that the framework does not need
to use reflection or dynamic method generation. Still, I haven't covered everything
yet, so there is still some expensive reflection going on. The overall goal is certainly
to reduce this to null. 
</li>
          <li>
This is not a version 1.0 release. Do not treat it as such. It's complex matter, and
some things are not supported yet. Still 98% is finished. 
</li>
          <li>
I rushed the samples. There is a wpf sample that has the worst codebehind that exists.
Do not open it, your eyes will hurt. When I have time I'll build a proper MVC sample
that actually doesn't crash. 
</li>
        </ul>
        <p>
I am very excited to have gotten this far. Since PostSharp supports Silverlight, I'll
try to get this to work for silverlight as well, so we can build some serious RIA's!
I'll try to follow up with a screen cast soon.
</p>
        <p>
          <a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.sitechno.com%2fBlog%2fDisconnectedNTierObjectsUsingEntityFramework.aspx">
            <img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.sitechno.com%2fBlog%2fDisconnectedNTierObjectsUsingEntityFramework.aspx" border="0" />
          </a>
        </p>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=cacc6a0f-40bc-4bbb-809f-22de4200dd80" />
      </body>
      <title>Disconnected N-Tier objects using EntityFramework</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,cacc6a0f-40bc-4bbb-809f-22de4200dd80.aspx</guid>
      <link>http://www.sitechno.com/Blog/DisconnectedNTierObjectsUsingEntityFramework.aspx</link>
      <pubDate>Mon, 07 Apr 2008 20:25:31 GMT</pubDate>
      <description>&lt;p&gt;
I have just &lt;a href="http://www.codeplex.com/efcontrib" target=_blank&gt;checked in a
sample application&lt;/a&gt; that uses a server to retrieve data with EF and a client that
is totally unaware of EF. Changes on the client are changetracked and serialized in
a pretty xml format. Then, the server attaches to the graph and is able to use a context
to save changes. 
&lt;br&gt;
In this post I will explain some of the parts in more detail. I hope to follow up
on some point with a screencast. First, let's take a step back and look at the problem
(skip this if you've read my blog lately).
&lt;/p&gt;
&lt;h5&gt;Problems with N-Tier EF
&lt;/h5&gt;
&lt;p&gt;
Normal Entity Framework usage will generate classes for you that are adorned with
[DataMember] attributes, making them serializable using WCF's DataContractSerializer. 
&lt;br&gt;
The class that was generated has intimate knowledge of Entity Framework, which presents
itself as EF-specific tags in the XML: not pretty and not SOA at all!
&lt;/p&gt;
&lt;p&gt;
Further, on the receiving end (the client that deserializes these objects) those same
classes need to be around to deserialize into. This means that you will have to use
Entity Framework on the client: not SOA at all. This pretty much limits the usage
of your domain objects to a .Net client. (I'm not sure if Silverlight will be able
to use EF. If not: you will not be able to use these objects in Silverlight as well) 
&lt;/p&gt;
&lt;p&gt;
I probably pointed to &lt;a href="http://blogs.msdn.com/dsimmons/archive/2008/03/02/more-about-how-to-fit-the-objectcontext-into-apps.aspx" target=_blank&gt;this
post&lt;/a&gt; before, but Daniel Simmons talks about using EF in your architecture. He
acknowledges the problem but does not see it as a very big issue. In some situations,
this might not be a big problem, but in others &lt;strong&gt;it is&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
Then, there is the issue of serializing the objects with all their relations in-tact.
It's harder than you would hope. Daniel again has a solution, that you can find &lt;a href="http://blogs.msdn.com/dsimmons/archive/2008/01/28/entitybag-wrap-up-and-future-directions.aspx" target=_blank&gt;here&lt;/a&gt;.
He basically creates a serializable class (EntityBag) which groups all relations and
objects together and knows how to reassemble them. This way you can use your objects
on the client using EF and have a pretty seamless experience. Great!! However, it's
not going to work for other client technologies, so forget about SOA.
&lt;/p&gt;
&lt;p&gt;
Also: I prefer to work in a more 'agile'/'domain driven' way. Having a layer manifest
itself all the way up to the client, where it does not belong, really kills flexibility.
&lt;/p&gt;
&lt;h5&gt;Solution scope
&lt;/h5&gt;
&lt;p&gt;
My aim is to provide a solution that will allow me to:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Work with POCO classes (as persistence ignorant as I can get) 
&lt;li&gt;
No EF references on the client 
&lt;li&gt;
Full changetracking on the client that can be attached easily 
&lt;li&gt;
Use the same Domain classes (with it's logic and validation rules) on both server
and client: so no duplication of code 
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
We should be able to work with our classes in Silverlight even.
&lt;/p&gt;
&lt;h5&gt;The Parts of the Solution
&lt;/h5&gt;
&lt;p&gt;
I have partitioned the solution into some smaller projects. All use &lt;a href="http://www.postsharp.org/" target=_blank&gt;PostSharp&lt;/a&gt; to
do it's magic, but you will not notice a thing about it. (If you are unaware: PostSharp
will perform a step after compilation to transform your IL. This way, no source code
pollution).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;POCO&amp;nbsp; (only on server)&lt;/strong&gt;: 
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
this project will enrich your domain objects with EF information, so there is no need
to litter your objects with EF specific. Feel the agile love. 
&lt;li&gt;
has the ability to provide 'original values' to the serializer 
&lt;li&gt;
has the ability/knowledge on how to attach a graph to an EF context 
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;strong&gt;Circular serializer (both on server as client)&lt;/strong&gt;:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
creates surrogate objects that will be stand-ins during serialization. This fixes
the circular serialization problem. 
&lt;li&gt;
also creates datamembers that will hold your original values during serialization 
&lt;li&gt;
creates a method (CopyFromSurrogate) that allows the serializer to fill the original
object with values from the surrogate. 
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
The circular serializer does more then just solve the circular serialization problem.
I might refactor this to make it clearer.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Editable Business Object (only on client)&lt;/strong&gt;:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
this project implements IEditableObject (and INotifyPropertyChanged) on your domain
object 
&lt;li&gt;
knows how to keep 'original values' and provide them to the serializer 
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Again, this project might be split.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
So there are 3 different parts here. Let's look at that with a picture:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/DisconnectedNTierobjectsusingEntityFrame_12D68/image_2.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=480 alt=image src="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/DisconnectedNTierobjectsusingEntityFrame_12D68/image_thumb.png" width=554 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Basically, the circular serializer is the glue that is used on both the server and
the client. It knows how to serialize your objects and asks for help to get to the
original values. On the client, the EditableBusinessObject can provide that, on the
server, it is the original POCO project.
&lt;/p&gt;
&lt;p&gt;
Using them is dead simple, as I'll show.
&lt;/p&gt;
&lt;h5&gt;Look at some code
&lt;/h5&gt;
&lt;p&gt;
I've used the School database and let EF generate the entity mappings. I did not change
anything from the defaults, which basically means that the classes we end up with
are pretty awful. I don't care about them though for this sample. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/DisconnectedNTierobjectsusingEntityFrame_12D68/image_4.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=408 alt=image src="http://www.sitechno.com/Blog/content/binary/WindowsLiveWriter/DisconnectedNTierobjectsusingEntityFrame_12D68/image_thumb_1.png" width=640 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I then set the generated code to 'not compile' and created the following beautiful
classes by hand:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="BACKGROUND: #000000; COLOR: #f2f0df; FONT-FAMILY: monospace"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
0 &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;namespace&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Domain&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 1 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 2 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataContract&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;(Name &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Person"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;,
Namespace &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"tstNS"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 3 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;class&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Person&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 4 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;{&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 5 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 6 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;int&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; PersonID
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 7 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 8 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;string&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; LastName
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 9 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 10 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;string&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; FirstName
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 11 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 12 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff8080"&gt;DateTime&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;?&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; HireDate
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 13 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 14 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff8080"&gt;DateTime&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;?&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; EnrollmentDate
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 15 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 16 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 17 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;ICollection&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Enrollment&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Enrollments
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 18 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 19 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;ICollection&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Course&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Courses
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 20 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 21 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 22 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 23 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataContract&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;(Name &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Course"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;,
Namespace &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"tstNS"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 24 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;class&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Course&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 25 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 26 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 27 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;int&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; CourseID
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 28 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 29 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;string&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Title
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 30 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 31 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;string&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Days
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 32 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 33 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff8080"&gt;DateTime&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Time
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 34 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 35 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;string&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Location
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 36 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 37 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;int&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Credits
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 38 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 39 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Department&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Department
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 40 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 41 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 42 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;ICollection&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Enrollment&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Enrollments
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 43 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 44 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;ICollection&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Persons
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 45 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 46 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 47 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataContract&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;(Name&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Department"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;,
Namespace&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"tstNS"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 48 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;class&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Department&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 49 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 50 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 51 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;int&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; DepartmentID
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 52 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 53 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;string&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Name
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 54 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 55 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff8080"&gt;Decimal&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Budget
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 56 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 57 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff8080"&gt;DateTime&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; StartDate
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 58 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 59 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;int&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Administrator
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 60 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 61 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 62 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;ICollection&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Course&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Courses
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 63 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 64 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 65 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataContract&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;(Name &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Enrollment"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;,
Namespace &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"tstNS"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 66 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;class&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Enrollment&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 67 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 68 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 69 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;int&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; EnrollmentID
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 70 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 71 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff8080"&gt;Decimal&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;?&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Grade
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 72 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 73 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 74 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Course&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Course
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 75 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 76 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Person
{ &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;get&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;set&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 77 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 78 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 79 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 80 &lt;/span&gt;&lt;span style="COLOR: #000000"&gt;&lt;/span&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Now, I need a trick to get seperate versions of this on the client and the server. &lt;em&gt;I
altered the msbuild script to add a conditional compile symbol that is the name of
the solution.&lt;/em&gt; You could go fancy with this technique, by matching the build name
and stuff. I just used this:
&lt;/p&gt;
&lt;pre&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;  &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;PropertyGroup&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;    &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;DefineConstants&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;$(DefineConstants);$(SolutionName)&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="COLOR: maroon"&gt;DefineConstants&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="COLOR: maroon"&gt;PropertyGroup&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;(Please let me know when someone uses this technique to target both Silverlight
and regular .net. It's possible!) 
&lt;br&gt;
&lt;/strong&gt;So, now it's time to apply our postsharp attributes. I did that in the assembly
info file:
&lt;/p&gt;
&lt;div style="FONT-FAMILY: courier new"&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: blue"&gt;#if&lt;/span&gt; Server&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;[assembly: Poco(&lt;span style="COLOR: maroon"&gt;"SchoolEntitiesConnection"&lt;/span&gt;,
AttributeTargetAssemblies = &lt;span style="COLOR: maroon"&gt;"Domain"&lt;/span&gt;, AttributeTargetTypes
= &lt;span style="COLOR: maroon"&gt;"Domain.*"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;[assembly: CreateSerializeSurrogate(&lt;span style="COLOR: maroon"&gt;"EntityFrameworkContrib.PostSharp4EF.ISerializationHelp,
EntityFrameworkContrib.PostSharp4EF"&lt;/span&gt;, AttributeTargetAssemblies = &lt;span style="COLOR: maroon"&gt;"Domain"&lt;/span&gt;,
AttributeTargetTypes = &lt;span style="COLOR: maroon"&gt;"Domain.*"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: blue"&gt;#endif&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: blue"&gt;#if&lt;/span&gt; Client&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;[assembly: EditableBusinessObjectAttribute(AttributeTargetAssemblies=&lt;span style="COLOR: maroon"&gt;"Domain"&lt;/span&gt;,
AttributeTargetTypes=&lt;span style="COLOR: maroon"&gt;"Domain.*"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;[assembly: CreateSerializeSurrogate(&lt;span style="COLOR: maroon"&gt;"EditableBusinessObjects.Postsharp.Public.IEditableBusinessObject,
EditableBusinessObjects.Postsharp.Public"&lt;/span&gt;, AttributeTargetAssemblies=&lt;span style="COLOR: maroon"&gt;"Domain"&lt;/span&gt;,
AttributeTargetTypes=&lt;span style="COLOR: maroon"&gt;"Domain.*"&lt;/span&gt;)]&lt;/pre&gt;
&lt;span style="COLOR: blue"&gt;#endif&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;
Pretty neat, isn't it? This notifies postsharp to either use Poco or EditableBusinessObject
to modify the compiled code. I only have one place to maintain this code. 
&lt;br&gt;
As you can see, the circular serialize (CreateSerializeSurrogate) takes the name of
a type that it can use to get 'original value' information from.
&lt;/p&gt;
&lt;p&gt;
I also created an interface project (just a nice best-practice) to identify my operation
contract:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="BACKGROUND: #000000; COLOR: #f2f0df; FONT-FAMILY: monospace"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
0 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;CircularReferenceSurrogateAttribute&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 1 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;ServiceContract&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;(Namespace&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Http://sitechno.School"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 2 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;interface&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;ISchoolService&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 3 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 4 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;OperationContract&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 5 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; GetPerson(&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;int&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; id, &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;bool&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; fetchEnrollments, &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;bool&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; fetchCourses);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 6 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 7 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;OperationContract&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 8 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;void&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; SavePerson(&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; person);&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 9 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 10 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; [&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;OperationContract&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 11 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IList&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Course&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; GetCourses();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 12 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 13 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
[&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;OperationContract&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 14 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IList&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Department&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; GetDepartments();&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 15 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 16 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;}&lt;/span&gt; 
&lt;br&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
See the CircularReferenceSurrogateAttribute on line 0: it applies a datacontract surrogate
manager, that will substitute surrogate types for the real types during serialization.
&lt;/p&gt;
&lt;p&gt;
Now, for the server:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="BACKGROUND: #000000; COLOR: #f2f0df; FONT-FAMILY: monospace"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
0 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;class&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;SchoolService&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; : &lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;ISchoolService&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 1 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 2 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; GetPerson(&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;int&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; id, &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;bool&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; fetchEnrollments, &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;bool&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; fetchCourses)&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 3 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 4 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;using&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;SchoolContext&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; context &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;new&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;SchoolContext&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;())&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 5 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 6 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; p &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;from&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; person &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;in&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; context&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Person&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 7 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;where&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; person&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;PersonID&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;==&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; id&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 8 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;select&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; person)&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;First();&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 9 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 10 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;if&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; (fetchEnrollments)&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 11 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 12 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
((&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IRelationshipLoader&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)p)&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Load(&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Enrollments"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 13 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;foreach&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Enrollment&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; r &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;in&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; p&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Enrollments)&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 14 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 15 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
((&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IRelationshipLoader&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)r)&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Load(&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Course"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 16 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
((&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IRelationshipLoader&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)r)&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Load(&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Person"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 17 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 18 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 19 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 20 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;if&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; (fetchCourses)&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 21 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 22 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
((&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IRelationshipLoader&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)p)&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Load(&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Courses"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 23 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;foreach&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Course&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; c &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;in&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; p&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Courses)&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 24 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 25 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
((&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IRelationshipLoader&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)c)&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Load(&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Department"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 26 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
((&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IRelationshipLoader&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)c)&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Load(&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Enrollments"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 27 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
((&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IRelationshipLoader&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)c)&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Load(&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Persons"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 28 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 29 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 30 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 31 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 32 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
((&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IContextAware&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)p)&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;CreateSerializableState(context);&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 33 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 34 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;return&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; p;&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 35 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 36 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 37 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 38 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 39 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 40 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;void&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; SavePerson(&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; person)&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 41 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 42 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;using&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;SchoolContext&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; context &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;new&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;SchoolContext&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;())&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 43 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 44 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
((&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IContextAware&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)person)&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;AttachGraphToContext(context,
entity &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; entity&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;GetType()&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Name);&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 45 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 46 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
context&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;SaveChanges();&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 47 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 48 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; }&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 49 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 50 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 51 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IList&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Course&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; GetCourses()&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 52 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; {&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 53 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;using&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;SchoolContext&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; context &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;new&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;SchoolContext&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;())&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 54 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
{&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 55 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;List&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Course&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; courses &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; context&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Course&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;ToList();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 56 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
courses&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;ForEach(crs &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; ((&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IContextAware&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)crs)&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;CreateSerializableState(context));&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 57 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;return&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; courses;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 58 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 59 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 60 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; }&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 61 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 62 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;public&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IList&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Department&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; GetDepartments()&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 63 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 64 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;using&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;SchoolContext&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; context &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;new&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;SchoolContext&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;())&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 65 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 66 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;List&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Department&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; deps &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; context&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Department&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;ToList();&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 67 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
deps&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;ForEach(dp &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; ((&lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IContextAware&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;)dp)&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;CreateSerializableState(context));&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 68 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;return&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; deps;&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 69 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 70 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; }&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 71 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 72 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;}&lt;/span&gt; 
&lt;br&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Before someone tells me that I'm not doing the includes/spans correctly in the GetPerson
method: I'll do it better when I do a more complete sample. 
&lt;/p&gt;
&lt;p&gt;
As you can see, for methods that return classes, I call the CreateSerializableState
method. Methods that accept a graph have to call the AttachGraphToContext method.
Obviously, these can and should be context extensibility methods. 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The CreateSerializableState method will use the context to get the 'original' values
and load them into your object. Your class actually has fields to hold this information
(as created by Poco). 
&lt;li&gt;
The AttachGraphToContext method is quite complex and will look at a graph and it's
original values. It will first set the original values, than do an acceptchanges and
change only those properties that were actually changed. It also fixes up relationships,
using add/attach/delete. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The client:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="BACKGROUND: #000000; COLOR: #f2f0df; FONT-FAMILY: monospace"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
0 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;static&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;void&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Main(&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;string&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;[]
args)&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 1 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 2 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;SchoolService&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; svc &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;new&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;SchoolService&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;();&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 3 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 4 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff80c0"&gt;IList&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Department&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; departments &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; svc&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;GetDepartments();&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 5 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 6 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; Fadi &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; svc&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;GetPerson(&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;4&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;false&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;false&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 7 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 8 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Console&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;WriteLine(&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;String&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Format(&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Working
on {0} {1}, Hired at {2:D}"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;,&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 9 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Fadi&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;FirstName,
Fadi&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;LastName,
Fadi&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;HireDate));&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 10 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Console&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;WriteLine();&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 11 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 12 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Console&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;WriteLine(&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"The
ID is not generated by the database in this instance, so please give me a number that
is not used already"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 13 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;int&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; id &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff8080"&gt;Int32&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Parse(&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Console&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;ReadLine());&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 14 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 15 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Console&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;WriteLine(&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"I
can bug you for a title as well, can't I?"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 16 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;string&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; title &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Console&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;ReadLine();&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 17 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 18 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Course&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; newCourse &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;new&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Course&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; {
CourseID &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; id,
Credits &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;10&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;,
Days &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"MT"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;,
Time &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff8080"&gt;DateTime&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Now,
Title &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; title
};&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 19 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
newCourse&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Persons &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;new&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;List&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; {
Fadi }; &lt;/span&gt;&lt;span style="COLOR: #a4a4a4"&gt;// normally, your object ctor would have
done this&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 20 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
newCourse&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Enrollments &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #90ee90"&gt;new&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;List&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Enrollment&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;();&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 21 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
newCourse&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Department &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; departments&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;First();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 22 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
newCourse&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Department&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Courses&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Add(newCourse);&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 23 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 24 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
Fadi&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;FirstName &lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Fadi,Changed
at "&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;+&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #ff8080"&gt;DateTime&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Now&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;ToShortTimeString();&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 25 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 26 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 27 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
Fadi&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Courses&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Add(newCourse);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 28 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 29 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 30 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp;
svc&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;SavePerson(Fadi);&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 31 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 32 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Console&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;WriteLine(&lt;/span&gt;&lt;span style="COLOR: #00ffff"&gt;"Finished,
go check your database. I added the new course to department:"&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;+&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt; newCourse&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Department&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;Name);&lt;/span&gt; 
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 33 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR: #ff0080"&gt;Console&lt;/span&gt;&lt;span style="COLOR: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;ReadLine();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 34 &lt;/span&gt;
&lt;br&gt;
&lt;div style="BACKGROUND: #222222"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 35 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 36 &lt;/span&gt;&lt;span style="COLOR: #eeeeee"&gt;&amp;nbsp; }&lt;/span&gt; 
&lt;br&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
One important thing to know is that on the client, there is no longer a concept of
relations, only lists. So you will need to hook up classes from both angles when you
connect them: see lines 21 and 22.
&lt;/p&gt;
&lt;h5&gt;Things to note
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
There is a LOT going on, but you are shielded from it and can work in a blissful persistence
ignorance way! 
&lt;li&gt;
Your objects will implement quite a few interfaces that you can use if you'd like 
&lt;li&gt;
The client side implements INotifyPropertyChanged (and raises events correctly) but
the ICollection implementations are still just Lists&amp;lt;&amp;gt;. I will change that to
ObservableCollections for you WPF lovers! (which includes me) 
&lt;li&gt;
I have not implemented deleting yet. So you can unhook a relationship, but that does
not delete the object. I don't think that it should either! I will probably implement
some 'MarkAsDelete' method on the client-side 
&lt;li&gt;
There is a strong optimization for speed. I, for instance, generate a method 'SetValue(string
propname, object val)' and corresponding GetValue so that the framework does not need
to use reflection or dynamic method generation. Still, I haven't covered everything
yet, so there is still some expensive reflection going on. The overall goal is certainly
to reduce this to null. 
&lt;li&gt;
This is not a version 1.0 release. Do not treat it as such. It's complex matter, and
some things are not supported yet. Still 98% is finished. 
&lt;li&gt;
I rushed the samples. There is a wpf sample that has the worst codebehind that exists.
Do not open it, your eyes will hurt. When I have time I'll build a proper MVC sample
that actually doesn't crash. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I am very excited to have gotten this far. Since PostSharp supports Silverlight, I'll
try to get this to work for silverlight as well, so we can build some serious RIA's!
I'll try to follow up with a screen cast soon.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.sitechno.com%2fBlog%2fDisconnectedNTierObjectsUsingEntityFramework.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.sitechno.com%2fBlog%2fDisconnectedNTierObjectsUsingEntityFramework.aspx" border=0&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=cacc6a0f-40bc-4bbb-809f-22de4200dd80" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,cacc6a0f-40bc-4bbb-809f-22de4200dd80.aspx</comments>
      <category>EF (Entity Framework);EF-Contrib;WCF (Indigo)</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=30d98afb-70c1-456d-8102-e054b4171512</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,30d98afb-70c1-456d-8102-e054b4171512.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,30d98afb-70c1-456d-8102-e054b4171512.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=30d98afb-70c1-456d-8102-e054b4171512</wfw:commentRss>
      <slash:comments>10</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
[important: this post belongs to a whole host of other posts. Basically it's about
my efforts of building a light-weight n-tier disconnected solution for Entity Framework]
</p>
        <p>
Another status update. I've worked on connecting up a clean graph to a EntityFramework
context and found it far from straight-forward! I ended up with very little code though,
which is a good sign.
</p>
        <p>
The approach of <em>not</em> serializing the object context, makes it harder to figure
out when an object was added or removed. On the client, I keep copies of the 'original'
collection and I compare the new collection with the old collection. Problem there
is that it's quite possible that an object was just removed from a collection and
added to another collection. How do we know we have to do a real 'delete' on it? 
<br />
I have not yet figured this out ;-)
</p>
        <p>
Here is some code for you to look at:
</p>
        <p>
        </p>
        <div style="background: #000000; color: #f2f0df; font-family: monospace">
          <span style="color: teal"> 
0 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #ff0080">Customer</span>
          <span style="color: #eeeeee"> c </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">Customer</span>
          <span style="color: #eeeeee"> {
Name </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"Ruurd
Boeke"</span>
          <span style="color: #eeeeee"> };</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  1 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #ff0080">Car</span>
            <span style="color: #eeeeee"> car1 </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">new</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">Car</span>
            <span style="color: #eeeeee"> {
Make </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #00ffff">"Saab"</span>
            <span style="color: #eeeeee">,
Customer </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> c
};</span>
          </div>
          <span style="color: teal">  2 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #ff0080">Order</span>
          <span style="color: #eeeeee"> order1 </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">Order</span>
          <span style="color: #eeeeee"> {
Amount </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">2</span>
          <span style="color: #eeeeee">,
Customer </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> c
};</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  3 </span>
          </div>
          <span style="color: teal">  4 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  5 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #ff80c0">IEditableBusinessObject</span>
            <span style="color: #eeeeee"> eC </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> c </span>
            <span style="color: #90ee90">as</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff80c0">IEditableBusinessObject</span>
            <span style="color: #eeeeee">;</span>
          </div>
          <span style="color: teal">  6 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #90ee90">string</span>
          <span style="color: #eeeeee"> MsgOnWire </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">""</span>
          <span style="color: #eeeeee">;</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  7 </span>
          </div>
          <span style="color: teal">  8 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #a4a4a4">//
at this point, we are not at all attached</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  9 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #90ee90">using</span>
            <span style="color: #eeeeee"> (</span>
            <span style="color: #ff0080">SimpleRelationshipTestEntities</span>
            <span style="color: #eeeeee"> context </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">new</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">SimpleRelationshipTestEntities</span>
            <span style="color: #eeeeee">())</span>
          </div>
          <span style="color: teal">  10 </span>
          <span style="color: #eeeeee">  
{</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  11 </span>
            <span style="color: #eeeeee">   
context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">AddToCustomer(c);</span>
          </div>
          <span style="color: teal">  12 </span>
          <span style="color: #eeeeee">   
context</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">SaveChanges();  </span>
          <span style="color: #a4a4a4">//
this instructs context to start changetracking</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  13 </span>
          </div>
          <span style="color: teal">  14 </span>
          <span style="color: #eeeeee">   
((</span>
          <span style="color: #ff80c0">IContextAware</span>
          <span style="color: #eeeeee">)c)</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">CreateSerializableState(context);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  15 </span>
          </div>
          <span style="color: teal">  16 </span>
          <span style="color: #eeeeee">    </span>
          <span style="color: #ff0080">DataContractSerializer</span>
          <span style="color: #eeeeee"> s </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">DataContractSerializer</span>
          <span style="color: #eeeeee">(c</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">GetType(), </span>
          <span style="color: #90ee90">null</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">int</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">MaxValue, </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">SubstituteDomainDataContractSurrogate</span>
          <span style="color: #eeeeee">());</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  17 </span>
          </div>
          <span style="color: teal">  18 </span>
          <span style="color: #eeeeee">   
MsgOnWire </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> s</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">GetWellFormedToContract(c);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  19 </span>
            <span style="color: #eeeeee">  
}</span>
          </div>
          <span style="color: teal">  20 </span>
          <span style="color: #000000">
          </span>
          <br />
        </div>
        <p>
        </p>
        <p>
The message on the wire looks like this: 
<br /></p>
        <pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">CustomerSurrogate</span>
            <span style="color: red">xmlns:i</span>="<span style="color: blue">http://www.w3.org/2001/XMLSchema-instance</span>" <span style="color: red">xmlns</span>="<span style="color: blue">myNamespace</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Cars</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Car</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">CarID</span>
            <span style="color: blue">&gt;</span>244<span style="color: blue">&lt;</span>/<span style="color: maroon">CarID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Customer</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>0<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Customer</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Make</span>
            <span style="color: blue">&gt;</span>Saab<span style="color: blue">&lt;</span>/<span style="color: maroon">Make</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>1<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_CarID</span>
            <span style="color: blue">&gt;</span>244<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_CarID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_Customer</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>0<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_Customer</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_Make</span>
            <span style="color: blue">&gt;</span>Saab<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_Make</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Car</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Cars</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">CustomerID</span>
            <span style="color: blue">&gt;</span>152<span style="color: blue">&lt;</span>/<span style="color: maroon">CustomerID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Name</span>
            <span style="color: blue">&gt;</span>Ruurd
Boeke<span style="color: blue">&lt;</span>/<span style="color: maroon">Name</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Orders</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Order</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Amount</span>
            <span style="color: blue">&gt;</span>2<span style="color: blue">&lt;</span>/<span style="color: maroon">Amount</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Customer</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>0<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Customer</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OrderID</span>
            <span style="color: blue">&gt;</span>159<span style="color: blue">&lt;</span>/<span style="color: maroon">OrderID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>2<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_Amount</span>
            <span style="color: blue">&gt;</span>2<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_Amount</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_Customer</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>0<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_Customer</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_OrderID</span>
            <span style="color: blue">&gt;</span>159<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_OrderID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Order</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Orders</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>0<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_Cars</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Car</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>1<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Car</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_Cars</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_CustomerID</span>
            <span style="color: blue">&gt;</span>152<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_CustomerID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_Name</span>
            <span style="color: blue">&gt;</span>Ruurd
Boeke<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_Name</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_Orders</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Order</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>2<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Order</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_Orders</span><span style="color: blue">&gt;</span></pre>
          <span style="color: blue">&lt;</span>/<span style="color: maroon">CustomerSurrogate</span><span style="color: blue">&gt;</span></pre>
        <p>
        </p>
        <p>
Next step is to receive this xml on the client, deserialize it and change some stuff:
</p>
        <p>
        </p>
        <div style="background: #000000; color: #f2f0df; font-family: monospace">
          <span style="color: teal"> 
0 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #ff0080">DataContractSerializer</span>
          <span style="color: #eeeeee"> s2 </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">DataContractSerializer</span>
          <span style="color: #eeeeee">(</span>
          <span style="color: #90ee90">typeof</span>
          <span style="color: #eeeeee">(</span>
          <span style="color: #ff0080">CustomerClient</span>
          <span style="color: #eeeeee">), </span>
          <span style="color: #90ee90">null</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">int</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">MaxValue, </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">SubstituteDomainDataContractSurrogate</span>
          <span style="color: #eeeeee">());</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  1 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #ff0080">CustomerClient</span>
            <span style="color: #eeeeee"> c2 </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> (</span>
            <span style="color: #ff0080">CustomerClient</span>
            <span style="color: #eeeeee">)s2</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">UnwrapFromString(MsgOnWire);</span>
          </div>
          <span style="color: teal">  2 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  3 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #a4a4a4">//
delete</span>
          </div>
          <span style="color: teal">  4 </span>
          <span style="color: #eeeeee">  
c2</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Cars</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">First()</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Customer </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">null</span>
          <span style="color: #eeeeee">;</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  5 </span>
            <span style="color: #eeeeee">  
c2</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Cars</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Clear();</span>
          </div>
          <span style="color: teal">  6 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  7 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #a4a4a4">//
add</span>
          </div>
          <span style="color: teal">  8 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #ff0080">OrderClient</span>
          <span style="color: #eeeeee"> order2 </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">OrderClient</span>
          <span style="color: #eeeeee"> {
Amount </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">100</span>
          <span style="color: #eeeeee">,
Customer </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> c2
};</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  9 </span>
            <span style="color: #eeeeee">  
c2</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Orders</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Add(order2);</span>
          </div>
          <span style="color: teal">  10 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  11 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #a4a4a4">//
change</span>
          </div>
          <span style="color: teal">  12 </span>
          <span style="color: #eeeeee">  
c2</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Name </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"Changed"</span>
          <span style="color: #eeeeee">;</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  13 </span>
          </div>
          <span style="color: teal">  14 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #a4a4a4">//
we have edited everything, let's get back to the server</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  15 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #ff0080">DataContractSerializer</span>
            <span style="color: #eeeeee"> s3 </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">new</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">DataContractSerializer</span>
            <span style="color: #eeeeee">(</span>
            <span style="color: #90ee90">typeof</span>
            <span style="color: #eeeeee">(</span>
            <span style="color: #ff0080">CustomerClient</span>
            <span style="color: #eeeeee">), </span>
            <span style="color: #90ee90">null</span>
            <span style="color: #eeeeee">, </span>
            <span style="color: #90ee90">int</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">MaxValue, </span>
            <span style="color: #90ee90">false</span>
            <span style="color: #eeeeee">, </span>
            <span style="color: #90ee90">false</span>
            <span style="color: #eeeeee">, </span>
            <span style="color: #90ee90">new</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">SubstituteDomainDataContractSurrogate</span>
            <span style="color: #eeeeee">());</span>
          </div>
          <span style="color: teal">  16 </span>
          <span style="color: #eeeeee">  
MsgOnWire </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> s3</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">GetWellFormedToContract(c2);</span>
          <br />
        </div>
        <p>
        </p>
        <p>
This client is removing the cars. Note that we do not get the automatic hookup of
relations that we used to get on the server: there is no EF Relationship manager on
the client!
</p>
        <pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">CustomerSurrogate</span>
            <span style="color: red">xmlns:i</span>="<span style="color: blue">http://www.w3.org/2001/XMLSchema-instance</span>" <span style="color: red">xmlns</span>="<span style="color: blue">myNamespace</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Cars</span> /<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">CustomerID</span>
            <span style="color: blue">&gt;</span>152<span style="color: blue">&lt;</span>/<span style="color: maroon">CustomerID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Name</span>
            <span style="color: blue">&gt;</span>Changed<span style="color: blue">&lt;</span>/<span style="color: maroon">Name</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Orders</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Order</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Amount</span>
            <span style="color: blue">&gt;</span>2<span style="color: blue">&lt;</span>/<span style="color: maroon">Amount</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Customer</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>0<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Customer</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OrderID</span>
            <span style="color: blue">&gt;</span>159<span style="color: blue">&lt;</span>/<span style="color: maroon">OrderID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>1<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_Amount</span>
            <span style="color: blue">&gt;</span>2<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_Amount</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_Customer</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>0<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_Customer</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_OrderID</span>
            <span style="color: blue">&gt;</span>159<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_OrderID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Order</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Order</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Amount</span>
            <span style="color: blue">&gt;</span>100<span style="color: blue">&lt;</span>/<span style="color: maroon">Amount</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Customer</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>0<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Customer</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>2<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Order</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Orders</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>0<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_Cars</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Car</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">CarID</span>
            <span style="color: blue">&gt;</span>244<span style="color: blue">&lt;</span>/<span style="color: maroon">CarID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Make</span>
            <span style="color: blue">&gt;</span>Saab<span style="color: blue">&lt;</span>/<span style="color: maroon">Make</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>3<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_CarID</span>
            <span style="color: blue">&gt;</span>244<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_CarID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_Customer</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>0<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_Customer</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_Make</span>
            <span style="color: blue">&gt;</span>Saab<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_Make</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Car</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_Cars</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_CustomerID</span>
            <span style="color: blue">&gt;</span>152<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_CustomerID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_Name</span>
            <span style="color: blue">&gt;</span>Ruurd
Boeke<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_Name</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_Orders</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Order</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>1<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Order</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_Orders</span><span style="color: blue">&gt;</span></pre>
          <span style="color: blue">&lt;</span>/<span style="color: maroon">CustomerSurrogate</span><span style="color: blue">&gt;</span></pre>
        <p>
We see that there are no current cars, but the original value of cars still has them.
That is how I figure out to delete the cars on the server. 
<br />
Did you also notice how the new order does not have a ID assigned? The server will
take care of it.
</p>
        <p>
        </p>
        <div style="background: #000000; color: #f2f0df; font-family: monospace">
          <span style="color: teal"> 
0 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #a4a4a4">//
we're at the server</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  1 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #90ee90">using</span>
            <span style="color: #eeeeee"> (</span>
            <span style="color: #ff0080">SimpleRelationshipTestEntities</span>
            <span style="color: #eeeeee"> context </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">new</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">SimpleRelationshipTestEntities</span>
            <span style="color: #eeeeee">())</span>
          </div>
          <span style="color: teal">  2 </span>
          <span style="color: #eeeeee">  
{</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  3 </span>
            <span style="color: #eeeeee">    </span>
            <span style="color: #ff0080">DataContractSerializer</span>
            <span style="color: #eeeeee"> s4 </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">new</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">DataContractSerializer</span>
            <span style="color: #eeeeee">(</span>
            <span style="color: #90ee90">typeof</span>
            <span style="color: #eeeeee">(</span>
            <span style="color: #ff0080">Customer</span>
            <span style="color: #eeeeee">), </span>
            <span style="color: #90ee90">null</span>
            <span style="color: #eeeeee">, </span>
            <span style="color: #90ee90">int</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">MaxValue, </span>
            <span style="color: #90ee90">false</span>
            <span style="color: #eeeeee">, </span>
            <span style="color: #90ee90">false</span>
            <span style="color: #eeeeee">, </span>
            <span style="color: #90ee90">new</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">SubstituteDomainDataContractSurrogate</span>
            <span style="color: #eeeeee">());</span>
          </div>
          <span style="color: teal">  4 </span>
          <span style="color: #eeeeee">    </span>
          <span style="color: #ff0080">Customer</span>
          <span style="color: #eeeeee"> c3 </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> (</span>
          <span style="color: #ff0080">Customer</span>
          <span style="color: #eeeeee">)s4</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">UnwrapFromString(MsgOnWire);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  5 </span>
          </div>
          <span style="color: teal">  6 </span>
          <span style="color: #eeeeee">   
((</span>
          <span style="color: #ff80c0">IContextAware</span>
          <span style="color: #eeeeee">)c3)</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">AttachGraphToContext(context,</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  7 </span>
            <span style="color: #eeeeee">     </span>
            <span style="color: #90ee90">delegate</span>
            <span style="color: #eeeeee">(</span>
            <span style="color: #90ee90">object</span>
            <span style="color: #eeeeee"> source)</span>
          </div>
          <span style="color: teal">  8 </span>
          <span style="color: #eeeeee">    
{</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  9 </span>
            <span style="color: #eeeeee">      </span>
            <span style="color: #90ee90">return</span>
            <span style="color: #eeeeee"> source</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">GetType()</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Name;   </span>
            <span style="color: #a4a4a4">//
our setnames correspond to our classname. </span>
          </div>
          <span style="color: teal">  10 </span>
          <span style="color: #eeeeee">    
});</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  11 </span>
          </div>
          <span style="color: teal">  12 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  13 </span>
            <span style="color: #eeeeee">   
context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">SaveChanges();</span>
          </div>
          <span style="color: teal">  14 </span>
          <span style="color: #eeeeee">  
}</span>
          <br />
        </div>
        <p>
        </p>
        <p>
Now, we're deserializing and attaching the graph to the context. The delete on line
7 is a way of returning entitysetnames. EF needs to know the entitysetname to be able
to attach an object to a context, but there is no way for me to know it. So at this
point I let you make the decision yourself.
</p>
        <p>
The database is correctly filled and we are happy.
</p>
        <p>
Now, I really want to check in this source, but there is a lot to be done still. The
API I have created is monstrous. 
<br />
Also, I think there are quite a few situations where this will break horribly. 
</p>
        <p>
Once I get just a little happier about it, I will do a screencast building a server
using Entity Framework and a silverlight client that is editing.
</p>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=30d98afb-70c1-456d-8102-e054b4171512" />
      </body>
      <title>Relation support for n-tier EF</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,30d98afb-70c1-456d-8102-e054b4171512.aspx</guid>
      <link>http://www.sitechno.com/Blog/RelationSupportForNtierEF.aspx</link>
      <pubDate>Thu, 27 Mar 2008 16:20:28 GMT</pubDate>
      <description>&lt;p&gt;
[important: this post belongs to a whole host of other posts. Basically it's about
my efforts of building a light-weight n-tier disconnected solution for Entity Framework]
&lt;/p&gt;
&lt;p&gt;
Another status update. I've worked on connecting up a clean graph to a EntityFramework
context and found it far from straight-forward! I ended up with very little code though,
which is a good sign.
&lt;/p&gt;
&lt;p&gt;
The approach of &lt;em&gt;not&lt;/em&gt; serializing the object context, makes it harder to figure
out when an object was added or removed. On the client, I keep copies of the 'original'
collection and I compare the new collection with the old collection. Problem there
is that it's quite possible that an object was just removed from a collection and
added to another collection. How do we know we have to do a real 'delete' on it? 
&lt;br /&gt;
I have not yet figured this out ;-)
&lt;/p&gt;
&lt;p&gt;
Here is some code for you to look at:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="background: #000000; color: #f2f0df; font-family: monospace"&gt;&lt;span style="color: teal"&gt;&amp;#160;
0 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; c &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; {
Name &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Ruurd
Boeke&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; };&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 1 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Car&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; car1 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Car&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; {
Make &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Saab&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
Customer &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; c
};&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 2 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Order&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; order1 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Order&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; {
Amount &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;2&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
Customer &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; c
};&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 3 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 4 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 5 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IEditableBusinessObject&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; eC &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; c &lt;/span&gt;&lt;span style="color: #90ee90"&gt;as&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IEditableBusinessObject&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 6 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; MsgOnWire &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 7 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 8 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
at this point, we are not at all attached&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 9 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;using&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SimpleRelationshipTestEntities&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SimpleRelationshipTestEntities&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;())&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 10 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
{&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 11 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;AddToCustomer(c);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 12 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;SaveChanges();&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
this instructs context to start changetracking&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 13 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 14 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
((&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IContextAware&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)c)&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;CreateSerializableState(context);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 15 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 16 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; s &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(c&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;GetType(), &lt;/span&gt;&lt;span style="color: #90ee90"&gt;null&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;MaxValue, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SubstituteDomainDataContractSurrogate&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;());&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 17 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 18 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
MsgOnWire &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; s&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;GetWellFormedToContract(c);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 19 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 20 &lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt; 
&lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
The message on the wire looks like this: 
&lt;br /&gt;
&lt;/p&gt;
&lt;pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;CustomerSurrogate&lt;/span&gt; &lt;span style="color: red"&gt;xmlns:i&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;myNamespace&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Cars&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Car&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;CarID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;244&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;CarID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Make&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Saab&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Make&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_CarID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;244&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_CarID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_Make&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Saab&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_Make&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Car&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Cars&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;CustomerID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;152&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;CustomerID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Ruurd
Boeke&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Orders&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Order&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Amount&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Amount&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OrderID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;159&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OrderID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_Amount&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_Amount&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_OrderID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;159&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_OrderID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Order&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Orders&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_Cars&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Car&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Car&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_Cars&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_CustomerID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;152&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_CustomerID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Ruurd
Boeke&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_Orders&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Order&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Order&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_Orders&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;CustomerSurrogate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Next step is to receive this xml on the client, deserialize it and change some stuff:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="background: #000000; color: #f2f0df; font-family: monospace"&gt;&lt;span style="color: teal"&gt;&amp;#160;
0 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; s2 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #90ee90"&gt;typeof&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #ff0080"&gt;CustomerClient&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;), &lt;/span&gt;&lt;span style="color: #90ee90"&gt;null&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;MaxValue, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SubstituteDomainDataContractSurrogate&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;());&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 1 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;CustomerClient&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; c2 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;CustomerClient&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)s2&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;UnwrapFromString(MsgOnWire);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 2 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 3 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
delete&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 4 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
c2&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Cars&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;First()&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Customer &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;null&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 5 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
c2&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Cars&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Clear();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 6 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 7 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
add&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 8 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;OrderClient&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; order2 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;OrderClient&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; {
Amount &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;100&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
Customer &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; c2
};&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 9 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
c2&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Orders&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Add(order2);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 10 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 11 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
change&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 12 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
c2&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Name &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Changed&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 13 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 14 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
we have edited everything, let's get back to the server&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 15 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; s3 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #90ee90"&gt;typeof&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #ff0080"&gt;CustomerClient&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;), &lt;/span&gt;&lt;span style="color: #90ee90"&gt;null&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;MaxValue, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SubstituteDomainDataContractSurrogate&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;());&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 16 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
MsgOnWire &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; s3&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;GetWellFormedToContract(c2);&lt;/span&gt; 
&lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
This client is removing the cars. Note that we do not get the automatic hookup of
relations that we used to get on the server: there is no EF Relationship manager on
the client!
&lt;/p&gt;
&lt;pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;CustomerSurrogate&lt;/span&gt; &lt;span style="color: red"&gt;xmlns:i&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;myNamespace&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Cars&lt;/span&gt; /&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;CustomerID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;152&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;CustomerID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Changed&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Orders&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Order&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Amount&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Amount&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OrderID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;159&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OrderID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_Amount&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_Amount&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_OrderID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;159&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_OrderID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Order&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Order&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Amount&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;100&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Amount&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Order&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Orders&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_Cars&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Car&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;CarID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;244&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;CarID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Make&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Saab&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Make&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;3&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_CarID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;244&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_CarID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_Customer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_Make&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Saab&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_Make&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Car&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_Cars&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_CustomerID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;152&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_CustomerID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Ruurd
Boeke&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_Orders&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Order&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Order&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_Orders&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;CustomerSurrogate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
We see that there are no current cars, but the original value of cars still has them.
That is how I figure out to delete the cars on the server. 
&lt;br /&gt;
Did you also notice how the new order does not have a ID assigned? The server will
take care of it.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="background: #000000; color: #f2f0df; font-family: monospace"&gt;&lt;span style="color: teal"&gt;&amp;#160;
0 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
we're at the server&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 1 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;using&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SimpleRelationshipTestEntities&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SimpleRelationshipTestEntities&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;())&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 2 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
{&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 3 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; s4 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #90ee90"&gt;typeof&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;), &lt;/span&gt;&lt;span style="color: #90ee90"&gt;null&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;MaxValue, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SubstituteDomainDataContractSurrogate&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;());&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 4 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; c3 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)s4&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;UnwrapFromString(MsgOnWire);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 5 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 6 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
((&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IContextAware&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)c3)&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;AttachGraphToContext(context,&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 7 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;delegate&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #90ee90"&gt;object&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; source)&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 8 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
{&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 9 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;return&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; source&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;GetType()&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Name;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
our setnames correspond to our classname. &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 10 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
});&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 11 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 12 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 13 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;SaveChanges();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 14 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Now, we're deserializing and attaching the graph to the context. The delete on line
7 is a way of returning entitysetnames. EF needs to know the entitysetname to be able
to attach an object to a context, but there is no way for me to know it. So at this
point I let you make the decision yourself.
&lt;/p&gt;
&lt;p&gt;
The database is correctly filled and we are happy.
&lt;/p&gt;
&lt;p&gt;
Now, I really want to check in this source, but there is a lot to be done still. The
API I have created is monstrous. 
&lt;br /&gt;
Also, I think there are quite a few situations where this will break horribly. 
&lt;/p&gt;
&lt;p&gt;
Once I get just a little happier about it, I will do a screencast building a server
using Entity Framework and a silverlight client that is editing.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=30d98afb-70c1-456d-8102-e054b4171512" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,30d98afb-70c1-456d-8102-e054b4171512.aspx</comments>
      <category>EF (Entity Framework);EF-Contrib</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=60efbcd5-f2f4-4a4d-b642-77ee39549f02</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,60efbcd5-f2f4-4a4d-b642-77ee39549f02.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,60efbcd5-f2f4-4a4d-b642-77ee39549f02.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=60efbcd5-f2f4-4a4d-b642-77ee39549f02</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm working hard on bringing a couple of my projects together that will enable domainobjects
on the client without Entity Framework references. I thought I'd give a small update
on how that's working out for me.
</p>
        <h5>The endresult
</h5>
        <p>
What I want is one visual studio project: 'Domain' that holds business objects for
me that I can use on both the client and the server. What I do not want, is to have
to think about EntityFramework contexts on the client. Since I do not persist my objects
on the client, I see no reason to actually create a context on the client, just to
be able to do changetracking. Nor do I want to see any EF specific plumbing in the
messages between that client and server: I lose interoperability if I do that. Also,
if my client is Silverlight (for instance) I might not want to bring the EF assemblies
over (if that's even possible?).
</p>
        <p>
          <em>So, the endresult should be an easy way to serialize and deserialize objects on
the client and server, and a way to build up the object correctly on the server so
it can be attached to the context again.</em>
        </p>
        <p>
Please check <a href="http://blogs.msdn.com/dsimmons/default.aspx" target="_blank">Daniel's</a><a href="http://blogs.msdn.com/dsimmons/archive/2008/01/28/entitybag-wrap-up-and-future-directions.aspx" target="_blank">EntityBag
sample</a> for a very sophisticated way of serializing your context. He does go down
the route of serializing the objectcontext, which does mean you need the entityframework
on the client. Read about his motivations for doing this <a href="http://blogs.msdn.com/dsimmons/archive/2008/03/02/more-about-how-to-fit-the-objectcontext-into-apps.aspx" target="_blank">here</a>. 
</p>
        <h5>Let's see it
</h5>
        <p>
I'll first show some code and then walk you through it.
</p>
        <p>
        </p>
        <div style="background: #000000; color: #f2f0df; font-family: monospace">
          <span style="color: teal"> 
0 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #90ee90">using</span>
          <span style="color: #eeeeee"> (OneSimpleType</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #ff0080">OneSimpleTypeConnection</span>
          <span style="color: #eeeeee"> context </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> OneSimpleType</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #ff0080">OneSimpleTypeConnection</span>
          <span style="color: #eeeeee">())</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  1 </span>
            <span style="color: #eeeeee">  
{</span>
          </div>
          <span style="color: teal">  2 </span>
          <span style="color: #eeeeee">    </span>
          <span style="color: #a4a4a4">//
clear out database</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  3 </span>
            <span style="color: #eeeeee">    </span>
            <span style="color: #90ee90">foreach</span>
            <span style="color: #eeeeee"> (OneSimpleType</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #ff0080">Person</span>
            <span style="color: #eeeeee"> old </span>
            <span style="color: #90ee90">in</span>
            <span style="color: #eeeeee"> context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Person)</span>
          </div>
          <span style="color: teal">  4 </span>
          <span style="color: #eeeeee">   
{</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  5 </span>
            <span style="color: #eeeeee">    
context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">DeleteObject(old);</span>
          </div>
          <span style="color: teal">  6 </span>
          <span style="color: #eeeeee">   
}</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  7 </span>
            <span style="color: #eeeeee">   
context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">SaveChanges();</span>
          </div>
          <span style="color: teal">  8 </span>
          <span style="color: #eeeeee">  
}</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  9 </span>
          </div>
          <span style="color: teal">  10 </span>
          <span style="color: #eeeeee">  
OneSimpleType</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #ff0080">Person</span>
          <span style="color: #eeeeee"> p </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> OneSimpleType</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #ff0080">Person</span>
          <span style="color: #eeeeee"> {
Firstname </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"Ruurd"</span>
          <span style="color: #eeeeee">,
Lastname </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"Boeke"</span>
          <span style="color: #eeeeee"> };</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  11 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #ff80c0">IEditableBusinessObject</span>
            <span style="color: #eeeeee"> ep </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> p </span>
            <span style="color: #90ee90">as</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff80c0">IEditableBusinessObject</span>
            <span style="color: #eeeeee">;</span>
          </div>
          <span style="color: teal">  12 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #90ee90">string</span>
          <span style="color: #eeeeee"> MsgOnWire </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">""</span>
          <span style="color: #eeeeee">;</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  13 </span>
          </div>
          <span style="color: teal">  14 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #90ee90">using</span>
          <span style="color: #eeeeee"> (OneSimpleType</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #ff0080">OneSimpleTypeConnection</span>
          <span style="color: #eeeeee"> context </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> OneSimpleType</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #ff0080">OneSimpleTypeConnection</span>
          <span style="color: #eeeeee">())</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  15 </span>
            <span style="color: #eeeeee">  
{</span>
          </div>
          <span style="color: teal">  16 </span>
          <span style="color: #eeeeee">   
context</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">AddToPerson(p);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  17 </span>
            <span style="color: #eeeeee">   
context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">SaveChanges();  </span>
            <span style="color: #a4a4a4">//
at this point, there should be 'original values'</span>
          </div>
          <span style="color: teal">  18 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  19 </span>
            <span style="color: #eeeeee">    </span>
            <span style="color: #a4a4a4">//
the server is changing the object without yet saving</span>
          </div>
          <span style="color: teal">  20 </span>
          <span style="color: #eeeeee">   
p</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Firstname </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"ServerChanged"</span>
          <span style="color: #eeeeee">;</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  21 </span>
          </div>
          <span style="color: teal">  22 </span>
          <span style="color: #eeeeee">    </span>
          <span style="color: #a4a4a4">//
now we need to create a version of the object that can be serialized well</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  23 </span>
            <span style="color: #eeeeee">   
p </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> (OneSimpleType</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #ff0080">Person</span>
            <span style="color: #eeeeee">)context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">CreateSerializableVersion(p);</span>
          </div>
          <span style="color: teal">  24 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  25 </span>
            <span style="color: #eeeeee">    </span>
            <span style="color: #ff0080">DataContractSerializer</span>
            <span style="color: #eeeeee"> s </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">new</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">DataContractSerializer</span>
            <span style="color: #eeeeee">(p</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">GetType(), </span>
            <span style="color: #90ee90">null</span>
            <span style="color: #eeeeee">, </span>
            <span style="color: #90ee90">int</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">MaxValue, </span>
            <span style="color: #90ee90">false</span>
            <span style="color: #eeeeee">, </span>
            <span style="color: #90ee90">false</span>
            <span style="color: #eeeeee">, </span>
            <span style="color: #90ee90">new</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">SubstituteDomainDataContractSurrogate</span>
            <span style="color: #eeeeee">());</span>
          </div>
          <span style="color: teal">  26 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  27 </span>
            <span style="color: #eeeeee">   
MsgOnWire </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> GetWellFormedToContract(p,
s);</span>
          </div>
          <span style="color: teal">  28 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  29 </span>
            <span style="color: #eeeeee">  
}</span>
          </div>
          <span style="color: teal">  30 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  31 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #a4a4a4">//
imagine we are the client getting a message and deserializing it</span>
          </div>
          <span style="color: teal">  32 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #ff0080">DataContractSerializer</span>
          <span style="color: #eeeeee"> s2 </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">DataContractSerializer</span>
          <span style="color: #eeeeee">(</span>
          <span style="color: #90ee90">typeof</span>
          <span style="color: #eeeeee">(OneSimpleType</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #ff0080">Person</span>
          <span style="color: #eeeeee">), </span>
          <span style="color: #90ee90">null</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">int</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">MaxValue, </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">SubstituteDomainDataContractSurrogate</span>
          <span style="color: #eeeeee">());</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  33 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #ff0080">StringReader</span>
            <span style="color: #eeeeee"> reader </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">new</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">StringReader</span>
            <span style="color: #eeeeee">(MsgOnWire);</span>
          </div>
          <span style="color: teal">  34 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #ff0080">XmlReader</span>
          <span style="color: #eeeeee"> xreader </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">XmlReader</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Create(reader);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  35 </span>
            <span style="color: #eeeeee">  
OneSimpleType</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #ff0080">Person</span>
            <span style="color: #eeeeee"> p2 </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> (OneSimpleType</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #ff0080">Person</span>
            <span style="color: #eeeeee">)s2</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">ReadObject(xreader);</span>
          </div>
          <span style="color: teal">  36 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  37 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #a4a4a4">//
edit something on the client</span>
          </div>
          <span style="color: teal">  38 </span>
          <span style="color: #eeeeee">  
p2</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Lastname </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"ClientChanged"</span>
          <span style="color: #eeeeee">;</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  39 </span>
          </div>
          <span style="color: teal">  40 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  41 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #a4a4a4">//
we have edited everything, let's get back to the server</span>
          </div>
          <span style="color: teal">  42 </span>
          <span style="color: #eeeeee">  
s2 </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">DataContractSerializer</span>
          <span style="color: #eeeeee">(</span>
          <span style="color: #90ee90">typeof</span>
          <span style="color: #eeeeee">(OneSimpleType</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #ff0080">Person</span>
          <span style="color: #eeeeee">), </span>
          <span style="color: #90ee90">null</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">int</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">MaxValue, </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">SubstituteDomainDataContractSurrogate</span>
          <span style="color: #eeeeee">());</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  43 </span>
            <span style="color: #eeeeee">  
MsgOnWire </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> GetWellFormedToContract(p2,
s2);</span>
          </div>
          <span style="color: teal">  44 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  45 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #a4a4a4">//
we're at the server</span>
          </div>
          <span style="color: teal">  46 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #90ee90">using</span>
          <span style="color: #eeeeee"> (OneSimpleType</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #ff0080">OneSimpleTypeConnection</span>
          <span style="color: #eeeeee"> context </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> OneSimpleType</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #ff0080">OneSimpleTypeConnection</span>
          <span style="color: #eeeeee">())</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  47 </span>
            <span style="color: #eeeeee">  
{</span>
          </div>
          <span style="color: teal">  48 </span>
          <span style="color: #eeeeee">    </span>
          <span style="color: #ff0080">DataContractSerializer</span>
          <span style="color: #eeeeee"> s3 </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">DataContractSerializer</span>
          <span style="color: #eeeeee">(</span>
          <span style="color: #90ee90">typeof</span>
          <span style="color: #eeeeee">(OneSimpleType</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #ff0080">Person</span>
          <span style="color: #eeeeee">), </span>
          <span style="color: #90ee90">null</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">int</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">MaxValue, </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">SubstituteDomainDataContractSurrogate</span>
          <span style="color: #eeeeee">());</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  49 </span>
            <span style="color: #eeeeee">    </span>
            <span style="color: #ff0080">StringReader</span>
            <span style="color: #eeeeee"> reader3 </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">new</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">StringReader</span>
            <span style="color: #eeeeee">(MsgOnWire);</span>
          </div>
          <span style="color: teal">  50 </span>
          <span style="color: #eeeeee">    </span>
          <span style="color: #ff0080">XmlReader</span>
          <span style="color: #eeeeee"> xreader3 </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">XmlReader</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Create(reader3);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  51 </span>
            <span style="color: #eeeeee">   
OneSimpleType</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #ff0080">Person</span>
            <span style="color: #eeeeee"> p3 </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> (OneSimpleType</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #ff0080">Person</span>
            <span style="color: #eeeeee">)s3</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">ReadObject(xreader3);</span>
          </div>
          <span style="color: teal">  52 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  53 </span>
            <span style="color: #eeeeee">   
context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">AttachedDeserializedVersion(p3, </span>
            <span style="color: #00ffff">"Person"</span>
            <span style="color: #eeeeee">);</span>
          </div>
          <span style="color: teal">  54 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  55 </span>
            <span style="color: #eeeeee">   
context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">SaveChanges();</span>
          </div>
          <span style="color: teal">  56 </span>
          <span style="color: #eeeeee">  
}</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  57 </span>
            <span style="color: #000000">
            </span>
          </div>
        </div>
        <p>
        </p>
        <p>
We start out on the serverside. 
<br />
On line 17, we have just saved an object to the database.  
<br />
We continue using that (attached, and thus changetracked) object and change a property
(just for the fun of it). 
<br />
On line 27 we serialize it like you've seen me do in previous posts. 
</p>
        <p>
On line 32, we pretend to be on the client, which uses the message to deserialize
to a compatible type. Note, that this type does not need to be <a href="http://www.sitechno.com/Blog/IntroducingEntityFrameworkContribEasyIPocoImplementationV01.aspx" target="_blank">'IPoco'
enhanced</a>. It does need to be enhanced for <a href="http://www.sitechno.com/Blog/CircularReferencesWithWCFSolvedADifferentWay.aspx" target="_blank">serialization</a> and <a href="http://www.sitechno.com/Blog/AddingEditSupportToBusinessobjects.aspx" target="_blank">editing</a>. 
</p>
        <p>
We change a property 'on the client' on line 38. Notice that this object does not
have a context attached at all. 
<br />
At line 43 we have once again serialized this new object and on line 46 we pretend
to be on the server again.
</p>
        <p>
There we create a new context and deserialize our message to an object. Then we call
an extension method of context to attach this version to the context. Note that I
have to pass the setname (working on somehow getting to this information differently). 
<br />
Finally we save. 
</p>
        <p>
Only the changed properties are flagged as dirty, so efficient SQL can be generated
by EF.
</p>
        <p>
The extension method is shown here:
</p>
        <p>
        </p>
        <div style="background: #000000; color: #f2f0df; font-family: monospace">
          <span style="color: teal"> 
0 </span>
          <span style="color: #eeeeee">  </span>
          <span style="color: #90ee90">public</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">static</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">void</span>
          <span style="color: #eeeeee"> AttachedDeserializedVersion(</span>
          <span style="color: #90ee90">this</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">ObjectContext</span>
          <span style="color: #eeeeee"> context, </span>
          <span style="color: #90ee90">object</span>
          <span style="color: #eeeeee"> source, </span>
          <span style="color: #90ee90">string</span>
          <span style="color: #eeeeee"> setname)</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  1 </span>
            <span style="color: #eeeeee"> 
{</span>
          </div>
          <span style="color: teal">  2 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #a4a4a4">//
TODO: how to get setname from metadata or something</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  3 </span>
          </div>
          <span style="color: teal">  4 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #ff0080">Debug</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Assert(source </span>
          <span style="color: #90ee90">is</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff80c0">IEntityWithKey</span>
          <span style="color: #eeeeee">);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  5 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #ff0080">Debug</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Assert(source </span>
            <span style="color: #90ee90">is</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff80c0">IEditableBusinessObject</span>
            <span style="color: #eeeeee">);</span>
          </div>
          <span style="color: teal">  6 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  7 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #ff80c0">IEditableBusinessObject</span>
            <span style="color: #eeeeee"> eS </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> (</span>
            <span style="color: #ff80c0">IEditableBusinessObject</span>
            <span style="color: #eeeeee">)source;</span>
          </div>
          <span style="color: teal">  8 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  9 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #a4a4a4">//
we go to the loaded state</span>
          </div>
          <span style="color: teal">  10 </span>
          <span style="color: #eeeeee">  
eS</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">SetReadMode(</span>
          <span style="color: #ff8040">ReadMode</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Loaded);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  11 </span>
          </div>
          <div style="background: #222222">
            <span style="color: teal">  14 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #90ee90">string</span>
            <span style="color: #eeeeee"> fullEntitySetName </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> context</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">DefaultContainerName </span>
            <span style="color: #c0c0c0">+</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #00ffff">"."</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #c0c0c0">+</span>
            <span style="color: #eeeeee"> setname;</span>
            <br />
          </div>
          <div style="background: #222222">
            <span style="color: teal">  15 </span>
          </div>
          <span style="color: teal">  16 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #ff0080">EntityKey</span>
          <span style="color: #eeeeee"> createdKey </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> context</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">GetEntityKey(fullEntitySetName,
source);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  17 </span>
            <span style="color: #eeeeee">  
((</span>
            <span style="color: #ff80c0">IEntityWithKey</span>
            <span style="color: #eeeeee">)source)</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">EntityKey </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> createdKey;</span>
          </div>
          <span style="color: teal">  18 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  19 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #a4a4a4">//
attach this version</span>
          </div>
          <span style="color: teal">  20 </span>
          <span style="color: #eeeeee">  
context</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Attach((</span>
          <span style="color: #ff80c0">IEntityWithKey</span>
          <span style="color: #eeeeee">)source);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  21 </span>
          </div>
          <span style="color: teal">  22 </span>
          <span style="color: #eeeeee">  
eS</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">ReplayLoadedToNormal();</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  23 </span>
          </div>
          <span style="color: teal">  24 </span>
          <span style="color: #eeeeee">  
eS</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">SetReadMode(</span>
          <span style="color: #ff8040">ReadMode</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Normal);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  25 </span>
          </div>
          <span style="color: teal">  26 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  27 </span>
            <span style="color: #eeeeee"> 
}</span>
          </div>
        </div>
        <p>
        </p>
        <p>
You see I have quite a bit of functionality in the IEditableBusinessObject interface. 
</p>
        <p>
The deserialized version of the object has a 'loaded' state (or better: original state)
and a 'current' state. Before attaching at line 20, I first set my object to be in
'original' mode. Then I have a replay method that will compare the current values
to the loaded versions and touch the setters of the properties of the changed versions.
This notifies the changetracker of EF to flag a property as dirty.
</p>
        <p>
This all works fine, but both code and api are pretty crude. I have no complextype
or relationshiptype support, but that will come, if I don't run into major problems
along the way.
</p>
        <p>
I hope you are as excited about this as I am. Let me know!
</p>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=60efbcd5-f2f4-4a4d-b642-77ee39549f02" />
      </body>
      <title>Progress on light objects on the client, full blown EF entities on the backend</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,60efbcd5-f2f4-4a4d-b642-77ee39549f02.aspx</guid>
      <link>http://www.sitechno.com/Blog/ProgressOnLightObjectsOnTheClientFullBlownEFEntitiesOnTheBackend.aspx</link>
      <pubDate>Fri, 21 Mar 2008 17:21:28 GMT</pubDate>
      <description>&lt;p&gt;
I'm working hard on bringing a couple of my projects together that will enable domainobjects
on the client without Entity Framework references. I thought I'd give a small update
on how that's working out for me.
&lt;/p&gt;
&lt;h5&gt;The endresult
&lt;/h5&gt;
&lt;p&gt;
What I want is one visual studio project: 'Domain' that holds business objects for
me that I can use on both the client and the server. What I do not want, is to have
to think about EntityFramework contexts on the client. Since I do not persist my objects
on the client, I see no reason to actually create a context on the client, just to
be able to do changetracking. Nor do I want to see any EF specific plumbing in the
messages between that client and server: I lose interoperability if I do that. Also,
if my client is Silverlight (for instance) I might not want to bring the EF assemblies
over (if that's even possible?).
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;So, the endresult should be an easy way to serialize and deserialize objects on
the client and server, and a way to build up the object correctly on the server so
it can be attached to the context again.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Please check &lt;a href="http://blogs.msdn.com/dsimmons/default.aspx" target="_blank"&gt;Daniel's&lt;/a&gt; &lt;a href="http://blogs.msdn.com/dsimmons/archive/2008/01/28/entitybag-wrap-up-and-future-directions.aspx" target="_blank"&gt;EntityBag
sample&lt;/a&gt; for a very sophisticated way of serializing your context. He does go down
the route of serializing the objectcontext, which does mean you need the entityframework
on the client. Read about his motivations for doing this &lt;a href="http://blogs.msdn.com/dsimmons/archive/2008/03/02/more-about-how-to-fit-the-objectcontext-into-apps.aspx" target="_blank"&gt;here&lt;/a&gt;. 
&lt;/p&gt;
&lt;h5&gt;Let's see it
&lt;/h5&gt;
&lt;p&gt;
I'll first show some code and then walk you through it.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="background: #000000; color: #f2f0df; font-family: monospace"&gt;&lt;span style="color: teal"&gt;&amp;#160;
0 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;using&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;OneSimpleTypeConnection&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;OneSimpleTypeConnection&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;())&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 1 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 2 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
clear out database&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 3 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;foreach&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; old &lt;/span&gt;&lt;span style="color: #90ee90"&gt;in&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Person)&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 4 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
{&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 5 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;DeleteObject(old);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 6 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 7 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;SaveChanges();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 8 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 9 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 10 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; p &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; {
Firstname &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Ruurd&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
Lastname &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Boeke&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; };&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 11 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IEditableBusinessObject&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; ep &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; p &lt;/span&gt;&lt;span style="color: #90ee90"&gt;as&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IEditableBusinessObject&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 12 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; MsgOnWire &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 13 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 14 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;using&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;OneSimpleTypeConnection&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;OneSimpleTypeConnection&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;())&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 15 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 16 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;AddToPerson(p);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 17 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;SaveChanges();&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
at this point, there should be 'original values'&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 18 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 19 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
the server is changing the object without yet saving&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 20 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
p&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Firstname &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;ServerChanged&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 21 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 22 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
now we need to create a version of the object that can be serialized well&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 23 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
p &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;CreateSerializableVersion(p);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 24 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 25 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; s &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(p&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;GetType(), &lt;/span&gt;&lt;span style="color: #90ee90"&gt;null&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;MaxValue, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SubstituteDomainDataContractSurrogate&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;());&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 26 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 27 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
MsgOnWire &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; GetWellFormedToContract(p,
s);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 28 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 29 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 30 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 31 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
imagine we are the client getting a message and deserializing it&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 32 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; s2 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #90ee90"&gt;typeof&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;), &lt;/span&gt;&lt;span style="color: #90ee90"&gt;null&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;MaxValue, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SubstituteDomainDataContractSurrogate&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;());&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 33 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;StringReader&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; reader &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;StringReader&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(MsgOnWire);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 34 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;XmlReader&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; xreader &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;XmlReader&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Create(reader);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 35 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; p2 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)s2&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;ReadObject(xreader);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 36 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 37 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
edit something on the client&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 38 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
p2&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Lastname &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;ClientChanged&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 39 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 40 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 41 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
we have edited everything, let's get back to the server&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 42 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
s2 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #90ee90"&gt;typeof&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;), &lt;/span&gt;&lt;span style="color: #90ee90"&gt;null&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;MaxValue, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SubstituteDomainDataContractSurrogate&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;());&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 43 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
MsgOnWire &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; GetWellFormedToContract(p2,
s2);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 44 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 45 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
we're at the server&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 46 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;using&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;OneSimpleTypeConnection&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;OneSimpleTypeConnection&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;())&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 47 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 48 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; s3 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #90ee90"&gt;typeof&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;), &lt;/span&gt;&lt;span style="color: #90ee90"&gt;null&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;MaxValue, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SubstituteDomainDataContractSurrogate&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;());&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 49 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;StringReader&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; reader3 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;StringReader&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(MsgOnWire);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 50 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;XmlReader&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; xreader3 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;XmlReader&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Create(reader3);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 51 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; p3 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (OneSimpleType&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)s3&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;ReadObject(xreader3);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 52 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 53 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;AttachedDeserializedVersion(p3, &lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Person&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 54 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 55 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;SaveChanges();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 56 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 57 &lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
We start out on the serverside. 
&lt;br /&gt;
On line 17, we have just saved an object to the database.&amp;#160; 
&lt;br /&gt;
We continue using that (attached, and thus changetracked) object and change a property
(just for the fun of it). 
&lt;br /&gt;
On line 27 we serialize it like you've seen me do in previous posts. 
&lt;/p&gt;
&lt;p&gt;
On line 32, we pretend to be on the client, which uses the message to deserialize
to a compatible type. Note, that this type does not need to be &lt;a href="http://www.sitechno.com/Blog/IntroducingEntityFrameworkContribEasyIPocoImplementationV01.aspx" target="_blank"&gt;'IPoco'
enhanced&lt;/a&gt;. It does need to be enhanced for &lt;a href="http://www.sitechno.com/Blog/CircularReferencesWithWCFSolvedADifferentWay.aspx" target="_blank"&gt;serialization&lt;/a&gt; and &lt;a href="http://www.sitechno.com/Blog/AddingEditSupportToBusinessobjects.aspx" target="_blank"&gt;editing&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
We change a property 'on the client' on line 38. Notice that this object does not
have a context attached at all. 
&lt;br /&gt;
At line 43 we have once again serialized this new object and on line 46 we pretend
to be on the server again.
&lt;/p&gt;
&lt;p&gt;
There we create a new context and deserialize our message to an object. Then we call
an extension method of context to attach this version to the context. Note that I
have to pass the setname (working on somehow getting to this information differently). 
&lt;br /&gt;
Finally we save. 
&lt;/p&gt;
&lt;p&gt;
Only the changed properties are flagged as dirty, so efficient SQL can be generated
by EF.
&lt;/p&gt;
&lt;p&gt;
The extension method is shown here:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="background: #000000; color: #f2f0df; font-family: monospace"&gt;&lt;span style="color: teal"&gt;&amp;#160;
0 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;static&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;void&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; AttachedDeserializedVersion(&lt;/span&gt;&lt;span style="color: #90ee90"&gt;this&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;ObjectContext&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;object&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; source, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; setname)&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 1 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 2 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
TODO: how to get setname from metadata or something&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 3 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 4 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Debug&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Assert(source &lt;/span&gt;&lt;span style="color: #90ee90"&gt;is&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IEntityWithKey&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 5 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Debug&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Assert(source &lt;/span&gt;&lt;span style="color: #90ee90"&gt;is&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IEditableBusinessObject&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 6 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 7 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IEditableBusinessObject&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; eS &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IEditableBusinessObject&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)source;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 8 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 9 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
we go to the loaded state&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 10 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
eS&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;SetReadMode(&lt;/span&gt;&lt;span style="color: #ff8040"&gt;ReadMode&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Loaded);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 11 &lt;/span&gt;
&lt;/div&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 14 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; fullEntitySetName &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;DefaultContainerName &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;+&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;+&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; setname;&lt;/span&gt; 
&lt;br /&gt;
&lt;/div&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 15 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 16 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;EntityKey&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; createdKey &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;GetEntityKey(fullEntitySetName,
source);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 17 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
((&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IEntityWithKey&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)source)&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;EntityKey &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; createdKey;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 18 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 19 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
attach this version&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 20 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
context&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Attach((&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IEntityWithKey&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)source);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 21 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 22 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
eS&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;ReplayLoadedToNormal();&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 23 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 24 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
eS&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;SetReadMode(&lt;/span&gt;&lt;span style="color: #ff8040"&gt;ReadMode&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Normal);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 25 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 26 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 27 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;
}&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
You see I have quite a bit of functionality in the IEditableBusinessObject interface. 
&lt;/p&gt;
&lt;p&gt;
The deserialized version of the object has a 'loaded' state (or better: original state)
and a 'current' state. Before attaching at line 20, I first set my object to be in
'original' mode. Then I have a replay method that will compare the current values
to the loaded versions and touch the setters of the properties of the changed versions.
This notifies the changetracker of EF to flag a property as dirty.
&lt;/p&gt;
&lt;p&gt;
This all works fine, but both code and api are pretty crude. I have no complextype
or relationshiptype support, but that will come, if I don't run into major problems
along the way.
&lt;/p&gt;
&lt;p&gt;
I hope you are as excited about this as I am. Let me know!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=60efbcd5-f2f4-4a4d-b642-77ee39549f02" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,60efbcd5-f2f4-4a4d-b642-77ee39549f02.aspx</comments>
      <category>EF (Entity Framework);EF-Contrib;WCF (Indigo)</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=1432c859-cadf-4b16-9552-c0c2a34d49b4</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,1432c859-cadf-4b16-9552-c0c2a34d49b4.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,1432c859-cadf-4b16-9552-c0c2a34d49b4.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1432c859-cadf-4b16-9552-c0c2a34d49b4</wfw:commentRss>
      <slash:comments>11</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'll probably dedicate a bigger post to this soon, but I wanted to show you a domainmodel,
some code and the xml it generates. 
<br />
What you see here is two attributes that take on quite a bit of work. 
<br /><em>EditableBusinessObject</em> implements IEditableObject for you and also allows
you to copy the currentvalues to a loadedvalues state. 
<br /><em>CreateSerializeSurrogate</em> generates a surrogate class that knows how to deal
with loadedvalues and with circular references. 
<br />
Together, they form the backbone of the client-side of your domainmodel. 
</p>
        <p>
Here is an example.
</p>
        <p>
          <strong>DomainModel</strong>: 
<br />
(notice this is the full class, no other properties are here) 
<br /></p>
        <div style="background: #000000; color: #f2f0df; font-family: monospace">
          <span style="color: teal"> 
0 </span>
          <span style="color: #eeeeee">[</span>
          <span style="color: #ff0080">EditableBusinessObject</span>
          <span style="color: #eeeeee">]</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  1 </span>
            <span style="color: #eeeeee">[</span>
            <span style="color: #ff0080">CreateSerializeSurrogate</span>
            <span style="color: #eeeeee">]</span>
          </div>
          <span style="color: teal">  2 </span>
          <span style="color: #eeeeee">[</span>
          <span style="color: #ff0080">Serializable</span>
          <span style="color: #eeeeee">]</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  3 </span>
            <span style="color: #eeeeee">[</span>
            <span style="color: #ff0080">DataContract</span>
            <span style="color: #eeeeee">(Namespace </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #00ffff">"myNamespace"</span>
            <span style="color: #eeeeee">,
Name </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #00ffff">"Person"</span>
            <span style="color: #eeeeee">)]</span>
          </div>
          <span style="color: teal">  4 </span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">public</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">class</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">Person</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  5 </span>
            <span style="color: #eeeeee">{</span>
          </div>
          <span style="color: teal">  6 </span>
          <span style="color: #eeeeee">  [</span>
          <span style="color: #ff0080">DataMember</span>
          <span style="color: #eeeeee">]</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  7 </span>
            <span style="color: #eeeeee">  </span>
            <span style="color: #90ee90">public</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">int</span>
            <span style="color: #eeeeee"> IntProperty
{ </span>
            <span style="color: #90ee90">get</span>
            <span style="color: #eeeeee">; </span>
            <span style="color: #90ee90">set</span>
            <span style="color: #eeeeee">;
}</span>
          </div>
          <span style="color: teal">  8 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  9 </span>
            <span style="color: #eeeeee"> 
[</span>
            <span style="color: #ff0080">DataMember</span>
            <span style="color: #eeeeee">]</span>
          </div>
          <span style="color: teal">  10 </span>
          <span style="color: #eeeeee">  </span>
          <span style="color: #90ee90">public</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">string</span>
          <span style="color: #eeeeee"> StringProperty
{ </span>
          <span style="color: #90ee90">get</span>
          <span style="color: #eeeeee">; </span>
          <span style="color: #90ee90">set</span>
          <span style="color: #eeeeee">;
}</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  11 </span>
          </div>
          <span style="color: teal">  12 </span>
          <span style="color: #eeeeee">  [</span>
          <span style="color: #ff0080">DataMember</span>
          <span style="color: #eeeeee">]</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  13 </span>
            <span style="color: #eeeeee">  </span>
            <span style="color: #90ee90">public</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">string</span>
            <span style="color: #eeeeee"> StringProperty2
{ </span>
            <span style="color: #90ee90">get</span>
            <span style="color: #eeeeee">; </span>
            <span style="color: #90ee90">set</span>
            <span style="color: #eeeeee">;
}</span>
          </div>
          <span style="color: teal">  14 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  15 </span>
            <span style="color: #eeeeee">  </span>
            <span style="color: #90ee90">int</span>
            <span style="color: #eeeeee"> neverSetInt;</span>
          </div>
          <span style="color: teal">  16 </span>
          <span style="color: #eeeeee">  [</span>
          <span style="color: #ff0080">DataMember</span>
          <span style="color: #eeeeee">]</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  17 </span>
            <span style="color: #eeeeee">  </span>
            <span style="color: #90ee90">public</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">int</span>
            <span style="color: #eeeeee"> NeverSetInt</span>
          </div>
          <span style="color: teal">  18 </span>
          <span style="color: #eeeeee">  {</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  19 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #90ee90">get</span>
          </div>
          <span style="color: teal">  20 </span>
          <span style="color: #eeeeee">  
{</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  21 </span>
            <span style="color: #eeeeee">    </span>
            <span style="color: #90ee90">return</span>
            <span style="color: #eeeeee"> neverSetInt;</span>
          </div>
          <span style="color: teal">  22 </span>
          <span style="color: #eeeeee">  
}</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  23 </span>
            <span style="color: #eeeeee">   </span>
            <span style="color: #90ee90">set</span>
            <span style="color: #eeeeee"> {
neverSetInt </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">value</span>
            <span style="color: #eeeeee">;
}</span>
          </div>
          <span style="color: teal">  24 </span>
          <span style="color: #eeeeee">  }</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  25 </span>
          </div>
          <span style="color: teal">  26 </span>
          <span style="color: #eeeeee">  [</span>
          <span style="color: #ff0080">DataMember</span>
          <span style="color: #eeeeee">]</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  27 </span>
            <span style="color: #eeeeee">  </span>
            <span style="color: #90ee90">public</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">List</span>
            <span style="color: #c0c0c0">&lt;</span>
            <span style="color: #90ee90">string</span>
            <span style="color: #c0c0c0">&gt;</span>
            <span style="color: #eeeeee"> StringLijst
{ </span>
            <span style="color: #90ee90">get</span>
            <span style="color: #eeeeee">; </span>
            <span style="color: #90ee90">set</span>
            <span style="color: #eeeeee">;
}</span>
          </div>
          <span style="color: teal">  28 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  29 </span>
            <span style="color: #eeeeee"> 
[</span>
            <span style="color: #ff0080">DataMember</span>
            <span style="color: #eeeeee">]</span>
          </div>
          <span style="color: teal">  30 </span>
          <span style="color: #eeeeee">  </span>
          <span style="color: #90ee90">public</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">List</span>
          <span style="color: #c0c0c0">&lt;</span>
          <span style="color: #90ee90">int</span>
          <span style="color: #c0c0c0">&gt;</span>
          <span style="color: #eeeeee"> IntLijst
{ </span>
          <span style="color: #90ee90">get</span>
          <span style="color: #eeeeee">; </span>
          <span style="color: #90ee90">set</span>
          <span style="color: #eeeeee">;
}</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  31 </span>
          </div>
          <span style="color: teal">  32 </span>
          <span style="color: #eeeeee">  </span>
          <span style="color: #90ee90">public</span>
          <span style="color: #eeeeee"> Person()</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  33 </span>
            <span style="color: #eeeeee"> 
{</span>
          </div>
          <span style="color: teal">  34 </span>
          <span style="color: #eeeeee">  
StringLijst </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">List</span>
          <span style="color: #c0c0c0">&lt;</span>
          <span style="color: #90ee90">string</span>
          <span style="color: #c0c0c0">&gt;</span>
          <span style="color: #eeeeee">();</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  35 </span>
            <span style="color: #eeeeee">  
IntLijst </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">new</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">List</span>
            <span style="color: #c0c0c0">&lt;</span>
            <span style="color: #90ee90">int</span>
            <span style="color: #c0c0c0">&gt;</span>
            <span style="color: #eeeeee">();</span>
          </div>
          <span style="color: teal">  36 </span>
          <span style="color: #eeeeee">  }</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  37 </span>
          </div>
          <span style="color: teal">  38 </span>
          <span style="color: #eeeeee">}</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  39 </span>
            <span style="color: #000000">
            </span>
          </div>
        </div>
        <p>
        </p>
        <p>
          <strong>Some testcode</strong>: 
<br />
(notice line 16 where we do a endEdit. If we had cancelled, we would've had a proper
rollback) 
<br /></p>
        <div style="background: #000000; color: #f2f0df; font-family: monospace">
          <span style="color: teal"> 
0 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #ff0080">Person</span>
          <span style="color: #eeeeee"> p </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">Person</span>
          <span style="color: #eeeeee">();</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  1 </span>
            <span style="color: #eeeeee">  
p</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">IntProperty </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #00ffff">1</span>
            <span style="color: #eeeeee">;</span>
          </div>
          <span style="color: teal">  2 </span>
          <span style="color: #eeeeee">  
p</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">StringProperty </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"Ruurd"</span>
          <span style="color: #eeeeee">;</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  3 </span>
            <span style="color: #eeeeee">  
p</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">StringProperty2 </span>
            <span style="color: #c0c0c0">=</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #00ffff">"Boeke"</span>
            <span style="color: #eeeeee">;</span>
          </div>
          <span style="color: teal">  4 </span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  5 </span>
            <span style="color: #eeeeee">  
p</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">StringLijst</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Add(</span>
            <span style="color: #00ffff">"a"</span>
            <span style="color: #eeeeee">);</span>
          </div>
          <span style="color: teal">  6 </span>
          <span style="color: #eeeeee">  
p</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">IntLijst</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Add(</span>
          <span style="color: #00ffff">1</span>
          <span style="color: #eeeeee">);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  7 </span>
          </div>
          <span style="color: teal">  8 </span>
          <span style="color: #eeeeee">  
(p </span>
          <span style="color: #90ee90">as</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff80c0">IEditableBusinessObject</span>
          <span style="color: #eeeeee">)</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">CopyCurrentToLoaded();</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  9 </span>
          </div>
          <span style="color: teal">  10 </span>
          <span style="color: #eeeeee">  
(p </span>
          <span style="color: #90ee90">as</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff80c0">IEditableBusinessObject</span>
          <span style="color: #eeeeee">)</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">BeginEdit();</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  11 </span>
          </div>
          <span style="color: teal">  12 </span>
          <span style="color: #eeeeee">  
p</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">IntLijst</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">Add(</span>
          <span style="color: #00ffff">2</span>
          <span style="color: #eeeeee">);</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  13 </span>
            <span style="color: #eeeeee">  
p</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">StringLijst</span>
            <span style="color: #c0c0c0">.</span>
            <span style="color: #eeeeee">Add(</span>
            <span style="color: #00ffff">"b"</span>
            <span style="color: #eeeeee">);</span>
          </div>
          <span style="color: teal">  14 </span>
          <span style="color: #eeeeee">  
p</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">StringProperty </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #00ffff">"Ruurd
Boeke"</span>
          <span style="color: #eeeeee">;</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  15 </span>
          </div>
          <span style="color: teal">  16 </span>
          <span style="color: #eeeeee">  
(p </span>
          <span style="color: #90ee90">as</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff80c0">IEditableBusinessObject</span>
          <span style="color: #eeeeee">)</span>
          <span style="color: #c0c0c0">.End</span>
          <span style="color: #eeeeee">Edit();</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  17 </span>
          </div>
          <span style="color: teal">  18 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #ff0080">DataContractSerializer</span>
          <span style="color: #eeeeee"> s </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">DataContractSerializer</span>
          <span style="color: #eeeeee">(p</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">GetType(), </span>
          <span style="color: #90ee90">null</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">int</span>
          <span style="color: #c0c0c0">.</span>
          <span style="color: #eeeeee">MaxValue, </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">false</span>
          <span style="color: #eeeeee">, </span>
          <span style="color: #90ee90">new</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #ff0080">SubstituteDomainDataContractSurrogate</span>
          <span style="color: #eeeeee">());</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  19 </span>
          </div>
          <span style="color: teal">  20 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #90ee90">string</span>
          <span style="color: #eeeeee"> outMessage </span>
          <span style="color: #c0c0c0">=</span>
          <span style="color: #eeeeee"> GetWellFormedToContract(p,
s);</span>
          <br />
        </div>
        <p>
        </p>
        <p>
And the <strong>generated xml</strong>: 
<br />
(notice how the lists and 'StringProperty' are changed, and see the original value).
</p>
        <pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">PersonSurrogate</span>
            <span style="color: red">xmlns:i</span>="<span style="color: blue">http://www.w3.org/2001/XMLSchema-instance</span>" <span style="color: red">xmlns</span>="<span style="color: blue">myNamespace</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">IntLijst</span>
            <span style="color: red">xmlns:d2p1</span>="<span style="color: blue">http://schemas.microsoft.com/2003/10/Serialization/Arrays</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">d2p1:int</span>
            <span style="color: blue">&gt;</span>1<span style="color: blue">&lt;</span>/<span style="color: maroon">d2p1:int</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">d2p1:int</span>
            <span style="color: blue">&gt;</span>2<span style="color: blue">&lt;</span>/<span style="color: maroon">d2p1:int</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">IntLijst</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">IntProperty</span>
            <span style="color: blue">&gt;</span>1<span style="color: blue">&lt;</span>/<span style="color: maroon">IntProperty</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">SerializationID</span>
            <span style="color: blue">&gt;</span>0<span style="color: blue">&lt;</span>/<span style="color: maroon">SerializationID</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">StringLijst</span>
            <span style="color: red">xmlns:d2p1</span>="<span style="color: blue">http://schemas.microsoft.com/2003/10/Serialization/Arrays</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">d2p1:string</span>
            <span style="color: blue">&gt;</span>a<span style="color: blue">&lt;</span>/<span style="color: maroon">d2p1:string</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">d2p1:string</span>
            <span style="color: blue">&gt;</span>b<span style="color: blue">&lt;</span>/<span style="color: maroon">d2p1:string</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">StringLijst</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">StringProperty</span>
            <span style="color: blue">&gt;</span>Ruurd
Boeke<span style="color: blue">&lt;</span>/<span style="color: maroon">StringProperty</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">StringProperty2</span>
            <span style="color: blue">&gt;</span>Boeke<span style="color: blue">&lt;</span>/<span style="color: maroon">StringProperty2</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_IntLijst</span>
            <span style="color: red">xmlns:d2p1</span>="<span style="color: blue">http://schemas.microsoft.com/2003/10/Serialization/Arrays</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">d2p1:int</span>
            <span style="color: blue">&gt;</span>1<span style="color: blue">&lt;</span>/<span style="color: maroon">d2p1:int</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_IntLijst</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_IntProperty</span>
            <span style="color: blue">&gt;</span>1<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_IntProperty</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_StringLijst</span>
            <span style="color: red">xmlns:d2p1</span>="<span style="color: blue">http://schemas.microsoft.com/2003/10/Serialization/Arrays</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">d2p1:string</span>
            <span style="color: blue">&gt;</span>a<span style="color: blue">&lt;</span>/<span style="color: maroon">d2p1:string</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_StringLijst</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_StringProperty</span>
            <span style="color: blue">&gt;</span>Ruurd<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_StringProperty</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">OriginalValue_StringProperty2</span>
            <span style="color: blue">&gt;</span>Boeke<span style="color: blue">&lt;</span>/<span style="color: maroon">OriginalValue_StringProperty2</span><span style="color: blue">&gt;</span></pre>
          <span style="color: blue">&lt;</span>/<span style="color: maroon">PersonSurrogate</span><span style="color: blue">&gt;</span></pre>
        <p>
What is left, is deserializing, maybe propagating the beginedit commands to all children
and then create the serverside EF variant. 
<br />
Oh, and I don't like the originalValue representation. Maybe I'll generate a OriginalValue
class to keep it tidy.
</p>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=1432c859-cadf-4b16-9552-c0c2a34d49b4" />
      </body>
      <title>Sneak preview: serializing objects with original values</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,1432c859-cadf-4b16-9552-c0c2a34d49b4.aspx</guid>
      <link>http://www.sitechno.com/Blog/SneakPreviewSerializingObjectsWithOriginalValues.aspx</link>
      <pubDate>Mon, 17 Mar 2008 21:28:31 GMT</pubDate>
      <description>&lt;p&gt;
I'll probably dedicate a bigger post to this soon, but I wanted to show you a domainmodel,
some code and the xml it generates. 
&lt;br /&gt;
What you see here is two attributes that take on quite a bit of work. 
&lt;br /&gt;
&lt;em&gt;EditableBusinessObject&lt;/em&gt; implements IEditableObject for you and also allows
you to copy the currentvalues to a loadedvalues state. 
&lt;br /&gt;
&lt;em&gt;CreateSerializeSurrogate&lt;/em&gt; generates a surrogate class that knows how to deal
with loadedvalues and with circular references. 
&lt;br /&gt;
Together, they form the backbone of the client-side of your domainmodel. 
&lt;/p&gt;
&lt;p&gt;
Here is an example.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;DomainModel&lt;/strong&gt;: 
&lt;br /&gt;
(notice this is the full class, no other properties are here) 
&lt;br /&gt;
&lt;/p&gt;
&lt;div style="background: #000000; color: #f2f0df; font-family: monospace"&gt;&lt;span style="color: teal"&gt;&amp;#160;
0 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;[&lt;/span&gt;&lt;span style="color: #ff0080"&gt;EditableBusinessObject&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 1 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;[&lt;/span&gt;&lt;span style="color: #ff0080"&gt;CreateSerializeSurrogate&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 2 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;[&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Serializable&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 3 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;[&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContract&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(Namespace &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;myNamespace&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;,
Name &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Person&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 4 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;class&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 5 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 6 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; [&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 7 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; IntProperty
{ &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 8 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 9 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;
[&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 10 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; StringProperty
{ &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 11 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 12 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; [&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 13 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; StringProperty2
{ &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 14 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 15 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; neverSetInt;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 16 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; [&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 17 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; NeverSetInt&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 18 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; {&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 19 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 20 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
{&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 21 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;return&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; neverSetInt;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 22 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 23 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; {
neverSetInt &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;value&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 24 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; }&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 25 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 26 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; [&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 27 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;List&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; StringLijst
{ &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 28 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 29 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;
[&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataMember&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 30 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;List&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; IntLijst
{ &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 31 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 32 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; Person()&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 33 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 34 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
StringLijst &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;List&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;();&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 35 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
IntLijst &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;List&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 36 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; }&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 37 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 38 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 39 &lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Some testcode&lt;/strong&gt;: 
&lt;br /&gt;
(notice line 16 where we do a endEdit. If we had cancelled, we would've had a proper
rollback) 
&lt;br /&gt;
&lt;/p&gt;
&lt;div style="background: #000000; color: #f2f0df; font-family: monospace"&gt;&lt;span style="color: teal"&gt;&amp;#160;
0 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; p &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;();&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 1 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
p&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;IntProperty &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;1&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 2 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
p&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;StringProperty &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Ruurd&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 3 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
p&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;StringProperty2 &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Boeke&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 4 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 5 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
p&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;StringLijst&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Add(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 6 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
p&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;IntLijst&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Add(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;1&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 7 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 8 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
(p &lt;/span&gt;&lt;span style="color: #90ee90"&gt;as&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IEditableBusinessObject&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;CopyCurrentToLoaded();&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 9 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 10 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
(p &lt;/span&gt;&lt;span style="color: #90ee90"&gt;as&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IEditableBusinessObject&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;BeginEdit();&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 11 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 12 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
p&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;IntLijst&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Add(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;2&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 13 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
p&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;StringLijst&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Add(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;b&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 14 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
p&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;StringProperty &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Ruurd
Boeke&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 15 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 16 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
(p &lt;/span&gt;&lt;span style="color: #90ee90"&gt;as&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IEditableBusinessObject&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.End&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;Edit();&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 17 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 18 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; s &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;DataContractSerializer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(p&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;GetType(), &lt;/span&gt;&lt;span style="color: #90ee90"&gt;null&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;MaxValue, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;false&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SubstituteDomainDataContractSurrogate&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;());&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 19 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 20 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; outMessage &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; GetWellFormedToContract(p,
s);&lt;/span&gt; 
&lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
And the &lt;strong&gt;generated xml&lt;/strong&gt;: 
&lt;br /&gt;
(notice how the lists and 'StringProperty' are changed, and see the original value).
&lt;/p&gt;
&lt;pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;PersonSurrogate&lt;/span&gt; &lt;span style="color: red"&gt;xmlns:i&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;myNamespace&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;IntLijst&lt;/span&gt; &lt;span style="color: red"&gt;xmlns:d2p1&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;http://schemas.microsoft.com/2003/10/Serialization/Arrays&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;d2p1:int&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;d2p1:int&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;d2p1:int&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;d2p1:int&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;IntLijst&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;IntProperty&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;IntProperty&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;SerializationID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;StringLijst&lt;/span&gt; &lt;span style="color: red"&gt;xmlns:d2p1&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;http://schemas.microsoft.com/2003/10/Serialization/Arrays&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;d2p1:string&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;a&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;d2p1:string&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;d2p1:string&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;b&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;d2p1:string&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;StringLijst&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;StringProperty&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Ruurd
Boeke&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;StringProperty&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;StringProperty2&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Boeke&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;StringProperty2&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_IntLijst&lt;/span&gt; &lt;span style="color: red"&gt;xmlns:d2p1&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;http://schemas.microsoft.com/2003/10/Serialization/Arrays&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;d2p1:int&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;d2p1:int&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_IntLijst&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_IntProperty&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_IntProperty&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_StringLijst&lt;/span&gt; &lt;span style="color: red"&gt;xmlns:d2p1&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;http://schemas.microsoft.com/2003/10/Serialization/Arrays&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;d2p1:string&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;a&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;d2p1:string&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_StringLijst&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_StringProperty&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Ruurd&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_StringProperty&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;OriginalValue_StringProperty2&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Boeke&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;OriginalValue_StringProperty2&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;PersonSurrogate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
What is left, is deserializing, maybe propagating the beginedit commands to all children
and then create the serverside EF variant. 
&lt;br /&gt;
Oh, and I don't like the originalValue representation. Maybe I'll generate a OriginalValue
class to keep it tidy.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=1432c859-cadf-4b16-9552-c0c2a34d49b4" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,1432c859-cadf-4b16-9552-c0c2a34d49b4.aspx</comments>
      <category>Code;EF-Contrib;WCF (Indigo)</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=08dfaa46-a957-4f34-a3dc-854fcef67c6f</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,08dfaa46-a957-4f34-a3dc-854fcef67c6f.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,08dfaa46-a957-4f34-a3dc-854fcef67c6f.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=08dfaa46-a957-4f34-a3dc-854fcef67c6f</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just finished full support for using complex types in EFContrib. I thought I'd quickly
share what complex types are and how they are used in Entity Framework. 
</p>
        <p>
Julie Lerman blogged about Complex Types <a href="http://www.thedatafarm.com/blog/2007/08/29/KnockingOffDannySimmonsEntityFrameworkBeta2List1ComplexTypes.aspx" target="_blank">here</a>,
where she also shows how to use them. Check her post for a great example. 
<br />
In Daniel Simmons' <a href="http://www.thedatafarm.com/blog/ct.ashx?id=fb5cee72-6787-4921-9872-c8e25faca9cf&amp;url=http%3a%2f%2fblogs.msdn.com%2fdsimmons%2farchive%2f2007%2f08%2f28%2faugust-ctp-of-the-entity-framework-released.aspx" target="_blank">words</a>: 
<br /><em><strong>Complex types </strong></em><em>“Complex types” is the Entity
Framework name for value properties which have more intricate structure than scalars.
The canonical example is an Address type which contains several parts (street, city,
state, etc.) Complex types are somewhat like entities except that they do not have
any identity of their own (they are value types). This means that a complex type instance
is always a part of some other enclosing entity—it can’t stand on its
own, it doesn’t have relationships, etc. In this release, the mapping scenarios
for complex types are significantly limited: inheritance is not supported, complex
type properties cannot be null and they can only occur in single instances, not collections.</em></p>
        <p>
So, a complex type can be seen as a struct, without identity. 
<br />
Let's create a complex type. I will have a person table with 3 address related columns.
My person object though, should have a property named 'Address' which points to a
class of type Address. 
<br />
The CSDL looks like this:
</p>
        <pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">EntityType</span>
            <span style="color: red">Name</span>="<span style="color: blue">Person</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Key</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">PropertyRef</span>
            <span style="color: red">Name</span>="<span style="color: blue">PersonID</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Key</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Property</span>
            <span style="color: red">Name</span>="<span style="color: blue">PersonID</span>" <span style="color: red">Type</span>="<span style="color: blue">Int32</span>" <span style="color: red">Nullable</span>="<span style="color: blue">false</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Property</span>
            <span style="color: red">Name</span>="<span style="color: blue">FirstName</span>" <span style="color: red">Type</span>="<span style="color: blue">String</span>" <span style="color: red">Nullable</span>="<span style="color: blue">false</span>" <span style="color: red">MaxLength</span>="<span style="color: blue">50</span>" <span style="color: red">Unicode</span>="<span style="color: blue">false</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Property</span>
            <span style="color: red">Name</span>="<span style="color: blue">LastName</span>" <span style="color: red">Type</span>="<span style="color: blue">String</span>" <span style="color: red">Nullable</span>="<span style="color: blue">false</span>" <span style="color: red">MaxLength</span>="<span style="color: blue">50</span>" <span style="color: red">Unicode</span>="<span style="color: blue">false</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Property</span>
            <span style="color: red">Name</span>="<span style="color: blue">Address</span>" <span style="color: red">Type</span>="<span style="color: blue">Self.Address</span>" <span style="color: red">Nullable</span>="<span style="color: blue">false</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">EntityType</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">ComplexType</span>
            <span style="color: red">Name</span>="<span style="color: blue">Address</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Property</span>
            <span style="color: red">Name</span>="<span style="color: blue">City</span>" <span style="color: red">Type</span>="<span style="color: blue">String</span>" <span style="color: red">Nullable</span>="<span style="color: blue">false</span>" <span style="color: red">MaxLength</span>="<span style="color: blue">50</span>" <span style="color: red">Unicode</span>="<span style="color: blue">false</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Property</span>
            <span style="color: red">Name</span>="<span style="color: blue">Street</span>" <span style="color: red">Type</span>="<span style="color: blue">String</span>" <span style="color: red">Nullable</span>="<span style="color: blue">false</span>" <span style="color: red">MaxLength</span>="<span style="color: blue">50</span>" <span style="color: red">Unicode</span>="<span style="color: blue">false</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Property</span>
            <span style="color: red">Name</span>="<span style="color: blue">PostalCode</span>" <span style="color: red">Type</span>="<span style="color: blue">String</span>" <span style="color: red">Nullable</span>="<span style="color: blue">false</span>" <span style="color: red">MaxLength</span>="<span style="color: blue">10</span>" <span style="color: red">Unicode</span>="<span style="color: blue">false</span>"
/<span style="color: blue">&gt;</span></pre>
          <span style="color: blue">&lt;</span>/<span style="color: maroon">ComplexType</span><span style="color: blue">&gt;</span></pre>
        <p>
Pretty clear: our Person has an address property, with a type of 'Self.Address'. Make
sure it is not Nullable. The Address is defined just like you would expect. Please
know that the current designer does not allow designing complextypes visually, which
is why I did it in xml.
</p>
        <p>
The database looks like this:
</p>
        <pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">EntityContainer</span>
            <span style="color: red">Name</span>="<span style="color: blue">dbo</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">EntitySet</span>
            <span style="color: red">Name</span>="<span style="color: blue">Person</span>" <span style="color: red">EntityType</span>="<span style="color: blue">ComplexTypesTestModel.Store.Person</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">EntityContainer</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">EntityType</span>
            <span style="color: red">Name</span>="<span style="color: blue">Person</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Key</span>
            <span style="color: blue">&gt;</span>
          </pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">PropertyRef</span>
            <span style="color: red">Name</span>="<span style="color: blue">PersonID</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">Key</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Property</span>
            <span style="color: red">Name</span>="<span style="color: blue">PersonID</span>" <span style="color: red">Type</span>="<span style="color: blue">int</span>" <span style="color: red">Nullable</span>="<span style="color: blue">false</span>" <span style="color: red">StoreGeneratedPattern</span>="<span style="color: blue">Identity</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Property</span>
            <span style="color: red">Name</span>="<span style="color: blue">FirstName</span>" <span style="color: red">Type</span>="<span style="color: blue">varchar</span>" <span style="color: red">Nullable</span>="<span style="color: blue">false</span>" <span style="color: red">MaxLength</span>="<span style="color: blue">50</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Property</span>
            <span style="color: red">Name</span>="<span style="color: blue">LastName</span>" <span style="color: red">Type</span>="<span style="color: blue">varchar</span>" <span style="color: red">Nullable</span>="<span style="color: blue">false</span>" <span style="color: red">MaxLength</span>="<span style="color: blue">50</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Property</span>
            <span style="color: red">Name</span>="<span style="color: blue">Street</span>" <span style="color: red">Type</span>="<span style="color: blue">varchar</span>" <span style="color: red">Nullable</span>="<span style="color: blue">false</span>" <span style="color: red">MaxLength</span>="<span style="color: blue">50</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Property</span>
            <span style="color: red">Name</span>="<span style="color: blue">City</span>" <span style="color: red">Type</span>="<span style="color: blue">varchar</span>" <span style="color: red">Nullable</span>="<span style="color: blue">false</span>" <span style="color: red">MaxLength</span>="<span style="color: blue">50</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">Property</span>
            <span style="color: red">Name</span>="<span style="color: blue">PostalCode</span>" <span style="color: red">Type</span>="<span style="color: blue">varchar</span>" <span style="color: red">Nullable</span>="<span style="color: blue">false</span>" <span style="color: red">MaxLength</span>="<span style="color: blue">10</span>"
/<span style="color: blue">&gt;</span></pre>
          <span style="color: blue">&lt;</span>/<span style="color: maroon">EntityType</span><span style="color: blue">&gt;</span></pre>
        <p>
Here we see a row with all columns in it. Darned DBA's!! 
</p>
        <p>
To map that database description to the classes, we take a look at the C-S mapping:
</p>
        <pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">EntitySetMapping</span>
            <span style="color: red">Name</span>="<span style="color: blue">Person</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">EntityTypeMapping</span>
            <span style="color: red">TypeName</span>="<span style="color: blue">IsTypeOf(EntityFrameworkContrib.PostSharp4EF.Testing.ComplexType.Person)</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">MappingFragment</span>
            <span style="color: red">StoreEntitySet</span>="<span style="color: blue">Person</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">ScalarProperty</span>
            <span style="color: red">Name</span>="<span style="color: blue">PersonID</span>" <span style="color: red">ColumnName</span>="<span style="color: blue">PersonID</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">ScalarProperty</span>
            <span style="color: red">Name</span>="<span style="color: blue">FirstName</span>" <span style="color: red">ColumnName</span>="<span style="color: blue">FirstName</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">ScalarProperty</span>
            <span style="color: red">Name</span>="<span style="color: blue">LastName</span>" <span style="color: red">ColumnName</span>="<span style="color: blue">LastName</span>"
/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">ComplexProperty</span>
            <span style="color: red">Name</span>="<span style="color: blue">Address</span>"<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">ScalarProperty</span>
            <span style="color: red">Name</span>="<span style="color: blue">City</span>" <span style="color: red">ColumnName</span>="<span style="color: blue">City</span>"/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">ScalarProperty</span>
            <span style="color: red">Name</span>="<span style="color: blue">Street</span>" <span style="color: red">ColumnName</span>="<span style="color: blue">Street</span>"/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>
            <span style="color: maroon">ScalarProperty</span>
            <span style="color: red">Name</span>="<span style="color: blue">PostalCode</span>" <span style="color: red">ColumnName</span>="<span style="color: blue">PostalCode</span>"/<span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">ComplexProperty</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">MappingFragment</span><span style="color: blue">&gt;</span></pre>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: blue">&lt;</span>/<span style="color: maroon">EntityTypeMapping</span><span style="color: blue">&gt;</span></pre>
          <span style="color: blue">&lt;</span>/<span style="color: maroon">EntitySetMapping</span><span style="color: blue">&gt;</span></pre>
        <p>
As you can see, the complexproperty is defined within the Person mapping. That caught
me off-guard for a while.
</p>
        <h5>EFContrib support
</h5>
        <p>
I have not checked in the source yet, but I will shortly at <a href="http://www.codeplex.com/efcontrib">http://www.codeplex.com/efcontrib</a>. 
<br />
As you know, my contribution project to Entity Framework aims to help you use Entity
Framework without all the generated code. You can just create your own domain model
and add one attribute. The system will actually change the code to facilitate the
EDM during compilation. Leaving you with a clean model. 
</p>
        <p>
It was actually quite difficult to implement this behind the scenes. To support normal
entitytypes, I have to implement the three IPoco interfaces. But complex types are
radically different. In the end, I had to alter the code I put into the setters of
your properties. 
<br />
I also had to somehow get hold of a list of properties in your type that are complexTypes
(in this case Address). When the system injects your entitytype with a changetracker,
it should notify all complex types. I could have done that with reflection, but we
all know that's really slow. So I actually generate a method in your entity: 'UpdateComplexTypes(tracker)'
and insert that with the correct IL to set the tracker in all the complextype-properties.
So the solution is as fast as it can get, completely on par with handwritten c#. I
may have to write another post on how I did it.
</p>
        <p>
Our domain objects look like this:
</p>
        <p>
        </p>
        <div style="background: #000000; color: #f2f0df; font-family: monospace">
          <span style="color: teal"> 
0 </span>
          <span style="color: #eeeeee">[</span>
          <span style="color: #ff0080">Poco</span>
          <span style="color: #eeeeee">(</span>
          <span style="color: #00ffff">"ComplexTypesTestEntities"</span>
          <span style="color: #eeeeee">)]</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  1 </span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">public</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">class</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #ff0080">Person</span>
          </div>
          <span style="color: teal">  2 </span>
          <span style="color: #eeeeee">{</span>
          <br />
          <div style="background: #222222">
            <span style="color: teal">  3 </span>
            <span style="color: #eeeeee">  </span>
            <span style="color: #90ee90">public</span>
            <span style="color: #eeeeee"> </span>
            <span style="color: #90ee90">int</span>
            <span style="color: #eeeeee"> </span>PersonID<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span></div>
          <span style="color: teal">  4 </span>
          <span style="color: #eeeeee">  </span>
          <span style="color: #90ee90">public</span>
          <span style="color: #eeeeee"> </span>
          <span style="color: #90ee90">string</span>
          <span style="color: #eeeeee"> </span>FirstName<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span><br /><div style="background: #222222"><span style="color: teal">  5 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">string</span><span style="color: #eeeeee"> </span>LastName<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span></div><span style="color: teal">  6 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Address</span><span style="color: #eeeeee"> </span>Address<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span><br /><div style="background: #222222"><span style="color: teal">  7 </span><span style="color: #eeeeee">}</span></div><span style="color: teal">  8 </span><br /><div style="background: #222222"><span style="color: teal">  9 </span><span style="color: #eeeeee">[</span><span style="color: #ff0080">Poco</span><span style="color: #eeeeee">(</span><span style="color: #00ffff">"ComplexTypesTestEntities"</span><span style="color: #eeeeee">)]</span></div><span style="color: teal">  10 </span><span style="color: #eeeeee"> </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">class</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Address</span><br /><div style="background: #222222"><span style="color: teal">  11 </span><span style="color: #eeeeee">{</span></div><span style="color: teal">  12 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">string</span><span style="color: #eeeeee"> </span>City<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span><br /><div style="background: #222222"><span style="color: teal">  13 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">string</span><span style="color: #eeeeee"> </span>Street<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span></div><span style="color: teal">  14 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">string</span><span style="color: #eeeeee"> </span>PostalCode<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span><br /><div style="background: #222222"><span style="color: teal">  15 </span><span style="color: #eeeeee">}</span></div><span style="color: teal">  16 </span><span style="color: #000000"></span><br /></div>
        <p>
        </p>
        <p>
Now, this code will work great:
</p>
        <p>
        </p>
        <div style="background: #000000; color: #f2f0df; font-family: monospace">
          <span style="color: teal"> 
0 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #90ee90">using</span>
          <span style="color: #eeeeee"> (</span>
          <span style="color: #ff0080">ComplexTypesTestEntities</span>
          <span style="color: #eeeeee"> </span>context<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">new</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">ComplexTypesTestEntities</span><span style="color: #eeeeee">())</span><br /><div style="background: #222222"><span style="color: teal">  1 </span><span style="color: #eeeeee">  
{</span></div><span style="color: teal">  2 </span><span style="color: #eeeeee">    </span><span style="color: #a4a4a4">//
clear out database</span><br /><div style="background: #222222"><span style="color: teal">  3 </span><span style="color: #eeeeee">    </span><span style="color: #90ee90">foreach</span><span style="color: #eeeeee"> (</span><span style="color: #ff0080">Person</span><span style="color: #eeeeee"> </span>old<span style="color: #eeeeee"> </span><span style="color: #90ee90">in</span><span style="color: #eeeeee"> </span>context<span style="color: #c0c0c0">.</span>Person<span style="color: #eeeeee">)</span></div><span style="color: teal">  4 </span><span style="color: #eeeeee">   
{</span><br /><div style="background: #222222"><span style="color: teal">  5 </span><span style="color: #eeeeee">     </span>context<span style="color: #c0c0c0">.</span>DeleteObject<span style="color: #eeeeee">(</span>old<span style="color: #eeeeee">);</span></div><span style="color: teal">  6 </span><span style="color: #eeeeee">   
}</span><br /><div style="background: #222222"><span style="color: teal">  7 </span><span style="color: #eeeeee">    </span>context<span style="color: #c0c0c0">.</span>SaveChanges<span style="color: #eeeeee">();</span></div><span style="color: teal">  8 </span><br /><div style="background: #222222"><span style="color: teal">  9 </span><span style="color: #eeeeee">    </span><span style="color: #ff0080">Person</span><span style="color: #eeeeee"> </span>p<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">new</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Person</span><span style="color: #eeeeee"> { </span>FirstName<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #00ffff">"Ruurd"</span><span style="color: #eeeeee">, </span>LastName<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #00ffff">"Boeke"</span><span style="color: #eeeeee"> };</span></div><span style="color: teal">  10 </span><br /><div style="background: #222222"><span style="color: teal">  11 </span><span style="color: #eeeeee">    </span><span style="color: #a4a4a4">//
this will set the changetracker</span></div><span style="color: teal">  12 </span><span style="color: #eeeeee">    </span>context<span style="color: #c0c0c0">.</span>AddToPerson<span style="color: #eeeeee">(</span>p<span style="color: #eeeeee">);</span><br /><div style="background: #222222"><span style="color: teal">  13 </span></div><span style="color: teal">  14 </span><span style="color: #eeeeee">    </span><span style="color: #ff0080">Address</span><span style="color: #eeeeee"> </span>a<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">new</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Address</span><span style="color: #eeeeee"> { </span>City<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #00ffff">"Rotterdam"</span><span style="color: #eeeeee">, </span>Street<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #00ffff">"My
Street"</span><span style="color: #eeeeee">, </span>PostalCode<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #00ffff">"1111
VA"</span><span style="color: #eeeeee"> };</span><br /><div style="background: #222222"><span style="color: teal">  15 </span><span style="color: #eeeeee">    </span>p<span style="color: #c0c0c0">.</span>Address<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>a<span style="color: #eeeeee">;</span></div><span style="color: teal">  16 </span><br /><div style="background: #222222"><span style="color: teal">  17 </span><span style="color: #eeeeee">    </span><span style="color: #ff80c0">IGetChangeTracker</span><span style="color: #eeeeee"> </span>ctA<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>PostSharp<span style="color: #c0c0c0">.</span><span style="color: #ff0080">Post</span><span style="color: #c0c0c0">.</span>Cast<span style="color: #c0c0c0">&lt;</span><span style="color: #ff0080">Address</span><span style="color: #eeeeee">, </span><span style="color: #ff80c0">IGetChangeTracker</span><span style="color: #c0c0c0">&gt;</span><span style="color: #eeeeee">(</span>a<span style="color: #eeeeee">);</span></div><span style="color: teal">  18 </span><span style="color: #eeeeee">    </span><span style="color: #ff0080">Debug</span><span style="color: #c0c0c0">.</span>Assert<span style="color: #eeeeee">(</span>ctA<span style="color: #c0c0c0">.</span>GetChangeTracker<span style="color: #eeeeee">() </span><span style="color: #c0c0c0">!=</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">null</span><span style="color: #eeeeee">);</span><br /><div style="background: #222222"><span style="color: teal">  19 </span></div><span style="color: teal">  20 </span><span style="color: #eeeeee">    </span><span style="color: #ff0080">Address</span><span style="color: #eeeeee"> </span>b<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">new</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Address</span><span style="color: #eeeeee"> { </span>City<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #00ffff">"Seattle"</span><span style="color: #eeeeee">, </span>Street<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #00ffff">"redmond
street"</span><span style="color: #eeeeee">, </span>PostalCode<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #00ffff">"2222
BB"</span><span style="color: #eeeeee"> };</span><br /><div style="background: #222222"><span style="color: teal">  21 </span><span style="color: #eeeeee">    </span>p<span style="color: #c0c0c0">.</span>Address<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>b<span style="color: #eeeeee">;</span></div><span style="color: teal">  22 </span><span style="color: #eeeeee">    </span><span style="color: #ff0080">Debug</span><span style="color: #c0c0c0">.</span>Assert<span style="color: #eeeeee">(</span>ctA<span style="color: #c0c0c0">.</span>GetChangeTracker<span style="color: #eeeeee">() </span><span style="color: #c0c0c0">==</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">null</span><span style="color: #eeeeee">);</span><br /><div style="background: #222222"><span style="color: teal">  23 </span></div><span style="color: teal">  24 </span><span style="color: #eeeeee">    </span><span style="color: #ff80c0">IGetChangeTracker</span><span style="color: #eeeeee"> </span>ctB<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>PostSharp<span style="color: #c0c0c0">.</span><span style="color: #ff0080">Post</span><span style="color: #c0c0c0">.</span>Cast<span style="color: #c0c0c0">&lt;</span><span style="color: #ff0080">Address</span><span style="color: #eeeeee">, </span><span style="color: #ff80c0">IGetChangeTracker</span><span style="color: #c0c0c0">&gt;</span><span style="color: #eeeeee">(</span>b<span style="color: #eeeeee">);</span><br /><div style="background: #222222"><span style="color: teal">  25 </span><span style="color: #eeeeee">    </span><span style="color: #ff0080">Debug</span><span style="color: #c0c0c0">.</span>Assert<span style="color: #eeeeee">(</span>ctB<span style="color: #c0c0c0">.</span>GetChangeTracker<span style="color: #eeeeee">() </span><span style="color: #c0c0c0">!=</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">null</span><span style="color: #eeeeee">);</span></div><span style="color: teal">  26 </span><br /><div style="background: #222222"><span style="color: teal">  27 </span><span style="color: #eeeeee">    </span>context<span style="color: #c0c0c0">.</span>SaveChanges<span style="color: #eeeeee">();</span></div><span style="color: teal">  28 </span><span style="color: #eeeeee">  
}</span><br /></div>
        <p>
        </p>
        <p>
You can see me casting the object to the interface I implemented on lines 17 and 24. 
</p>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=08dfaa46-a957-4f34-a3dc-854fcef67c6f" />
      </body>
      <title>Complex types in EF, how they work and support in EFContrib</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,08dfaa46-a957-4f34-a3dc-854fcef67c6f.aspx</guid>
      <link>http://www.sitechno.com/Blog/ComplexTypesInEFHowTheyWorkAndSupportInEFContrib.aspx</link>
      <pubDate>Fri, 14 Mar 2008 16:36:55 GMT</pubDate>
      <description>&lt;p&gt;
I just finished full support for using complex types in EFContrib. I thought I'd quickly
share what complex types are and how they are used in Entity Framework. 
&lt;/p&gt;
&lt;p&gt;
Julie Lerman blogged about Complex Types &lt;a href="http://www.thedatafarm.com/blog/2007/08/29/KnockingOffDannySimmonsEntityFrameworkBeta2List1ComplexTypes.aspx" target="_blank"&gt;here&lt;/a&gt;,
where she also shows how to use them. Check her post for a great example. 
&lt;br /&gt;
In Daniel Simmons' &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=fb5cee72-6787-4921-9872-c8e25faca9cf&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fdsimmons%2farchive%2f2007%2f08%2f28%2faugust-ctp-of-the-entity-framework-released.aspx" target="_blank"&gt;words&lt;/a&gt;: 
&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;Complex types &lt;/strong&gt;&lt;/em&gt;&lt;em&gt;&amp;#8220;Complex types&amp;#8221; is the Entity
Framework name for value properties which have more intricate structure than scalars.
The canonical example is an Address type which contains several parts (street, city,
state, etc.) Complex types are somewhat like entities except that they do not have
any identity of their own (they are value types). This means that a complex type instance
is always a part of some other enclosing entity&amp;#8212;it can&amp;#8217;t stand on its
own, it doesn&amp;#8217;t have relationships, etc. In this release, the mapping scenarios
for complex types are significantly limited: inheritance is not supported, complex
type properties cannot be null and they can only occur in single instances, not collections.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
So, a complex type can be seen as a struct, without identity. 
&lt;br /&gt;
Let's create a complex type. I will have a person table with 3 address related columns.
My person object though, should have a property named 'Address' which points to a
class of type Address. 
&lt;br /&gt;
The CSDL looks like this:
&lt;/p&gt;
&lt;pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;EntityType&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Person&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;PropertyRef&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;PersonID&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;PersonID&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Type&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Int32&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Nullable&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;FirstName&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Type&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;String&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Nullable&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;MaxLength&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;50&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Unicode&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;LastName&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Type&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;String&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Nullable&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;MaxLength&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;50&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Unicode&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Address&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Type&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Self.Address&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Nullable&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;EntityType&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;ComplexType&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Address&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;City&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Type&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;String&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Nullable&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;MaxLength&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;50&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Unicode&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Street&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Type&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;String&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Nullable&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;MaxLength&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;50&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Unicode&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;PostalCode&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Type&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;String&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Nullable&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;MaxLength&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;10&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Unicode&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;ComplexType&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
Pretty clear: our Person has an address property, with a type of 'Self.Address'. Make
sure it is not Nullable. The Address is defined just like you would expect. Please
know that the current designer does not allow designing complextypes visually, which
is why I did it in xml.
&lt;/p&gt;
&lt;p&gt;
The database looks like this:
&lt;/p&gt;
&lt;pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;EntityContainer&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;dbo&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;EntitySet&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Person&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;EntityType&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;ComplexTypesTestModel.Store.Person&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;EntityContainer&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;EntityType&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Person&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;PropertyRef&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;PersonID&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;PersonID&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Type&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Nullable&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;StoreGeneratedPattern&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Identity&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;FirstName&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Type&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;varchar&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Nullable&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;MaxLength&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;50&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;LastName&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Type&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;varchar&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Nullable&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;MaxLength&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;50&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Street&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Type&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;varchar&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Nullable&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;MaxLength&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;50&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;City&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Type&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;varchar&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Nullable&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;MaxLength&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;50&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Property&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;PostalCode&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Type&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;varchar&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;Nullable&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;MaxLength&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;10&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;EntityType&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
Here we see a row with all columns in it. Darned DBA's!! 
&lt;/p&gt;
&lt;p&gt;
To map that database description to the classes, we take a look at the C-S mapping:
&lt;/p&gt;
&lt;pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;          &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;EntitySetMapping&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Person&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;EntityTypeMapping&lt;/span&gt; &lt;span style="color: red"&gt;TypeName&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;IsTypeOf(EntityFrameworkContrib.PostSharp4EF.Testing.ComplexType.Person)&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;              &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;MappingFragment&lt;/span&gt; &lt;span style="color: red"&gt;StoreEntitySet&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Person&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;ScalarProperty&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;PersonID&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;ColumnName&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;PersonID&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;ScalarProperty&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;FirstName&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;ColumnName&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;FirstName&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;ScalarProperty&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;LastName&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;ColumnName&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;LastName&lt;/span&gt;&amp;quot;
/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;ComplexProperty&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Address&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;                  &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;ScalarProperty&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;City&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;ColumnName&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;City&lt;/span&gt;&amp;quot;/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;                  &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;ScalarProperty&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Street&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;ColumnName&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;Street&lt;/span&gt;&amp;quot;/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;                  &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;ScalarProperty&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;PostalCode&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;ColumnName&lt;/span&gt;=&amp;quot;&lt;span style="color: blue"&gt;PostalCode&lt;/span&gt;&amp;quot;/&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;ComplexProperty&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;              &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;MappingFragment&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;EntityTypeMapping&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;EntitySetMapping&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
As you can see, the complexproperty is defined within the Person mapping. That caught
me off-guard for a while.
&lt;/p&gt;
&lt;h5&gt;EFContrib support
&lt;/h5&gt;
&lt;p&gt;
I have not checked in the source yet, but I will shortly at &lt;a href="http://www.codeplex.com/efcontrib"&gt;http://www.codeplex.com/efcontrib&lt;/a&gt;. 
&lt;br /&gt;
As you know, my contribution project to Entity Framework aims to help you use Entity
Framework without all the generated code. You can just create your own domain model
and add one attribute. The system will actually change the code to facilitate the
EDM during compilation. Leaving you with a clean model. 
&lt;/p&gt;
&lt;p&gt;
It was actually quite difficult to implement this behind the scenes. To support normal
entitytypes, I have to implement the three IPoco interfaces. But complex types are
radically different. In the end, I had to alter the code I put into the setters of
your properties. 
&lt;br /&gt;
I also had to somehow get hold of a list of properties in your type that are complexTypes
(in this case Address). When the system injects your entitytype with a changetracker,
it should notify all complex types. I could have done that with reflection, but we
all know that's really slow. So I actually generate a method in your entity: 'UpdateComplexTypes(tracker)'
and insert that with the correct IL to set the tracker in all the complextype-properties.
So the solution is as fast as it can get, completely on par with handwritten c#. I
may have to write another post on how I did it.
&lt;/p&gt;
&lt;p&gt;
Our domain objects look like this:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="background: #000000; color: #f2f0df; font-family: monospace"&gt;&lt;span style="color: teal"&gt;&amp;#160;
0 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;[&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Poco&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;ComplexTypesTestEntities&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)]&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 1 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;class&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 2 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 3 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;PersonID&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 4 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;FirstName&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 5 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;LastName&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 6 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Address&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;Address&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 7 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 8 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 9 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;[&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Poco&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;ComplexTypesTestEntities&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 10 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;class&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Address&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 11 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 12 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;City&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 13 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;Street&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 14 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;PostalCode&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 15 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 16 &lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt; 
&lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Now, this code will work great:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="background: #000000; color: #f2f0df; font-family: monospace"&gt;&lt;span style="color: teal"&gt;&amp;#160;
0 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;using&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;ComplexTypesTestEntities&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;context&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;ComplexTypesTestEntities&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;())&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 1 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 2 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
clear out database&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 3 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;foreach&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;old&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;in&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;context&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Person&lt;span style="color: #eeeeee"&gt;)&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 4 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
{&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 5 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;context&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;DeleteObject&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;old&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 6 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 7 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;context&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;SaveChanges&lt;span style="color: #eeeeee"&gt;();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 8 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 9 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;p&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Person&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;FirstName&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Ruurd&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;LastName&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Boeke&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; };&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 10 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 11 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
this will set the changetracker&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 12 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;context&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;AddToPerson&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;p&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 13 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 14 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Address&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;a&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Address&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;City&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Rotterdam&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;Street&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;My
Street&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;PostalCode&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;1111
VA&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; };&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 15 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;p&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Address&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;a&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 16 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 17 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IGetChangeTracker&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;ctA&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;PostSharp&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Post&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Cast&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Address&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IGetChangeTracker&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;a&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 18 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Debug&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Assert&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;ctA&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;GetChangeTracker&lt;span style="color: #eeeeee"&gt;() &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;!=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;null&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 19 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 20 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Address&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;b&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Address&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;City&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Seattle&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;Street&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;redmond
street&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;PostalCode&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;2222
BB&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; };&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 21 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;p&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Address&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;b&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 22 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Debug&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Assert&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;ctA&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;GetChangeTracker&lt;span style="color: #eeeeee"&gt;() &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;==&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;null&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 23 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 24 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IGetChangeTracker&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;ctB&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;PostSharp&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Post&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Cast&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Address&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;&lt;span style="color: #ff80c0"&gt;IGetChangeTracker&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;b&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 25 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Debug&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Assert&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;ctB&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;GetChangeTracker&lt;span style="color: #eeeeee"&gt;() &lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;!=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;null&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 26 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 27 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;context&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;SaveChanges&lt;span style="color: #eeeeee"&gt;();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 28 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
You can see me casting the object to the interface I implemented on lines 17 and 24. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=08dfaa46-a957-4f34-a3dc-854fcef67c6f" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,08dfaa46-a957-4f34-a3dc-854fcef67c6f.aspx</comments>
      <category>EF (Entity Framework);EF-Contrib</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=e374f625-6a96-404d-ab81-fc05938db137</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,e374f625-6a96-404d-ab81-fc05938db137.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,e374f625-6a96-404d-ab81-fc05938db137.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e374f625-6a96-404d-ab81-fc05938db137</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've been working on the PostSharp4EF project of <a href="http://www.codeplex.com/efcontrib" target="_blank">EFContrib</a>.
I'm pleased to announce relationships are now supported.
</p>
        <p>
This actually proved to be somewhat more work, because of all the things that are
happening behind the scenes. 
<br />
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. 
<br />
So, I now generate these for you.
</p>
        <p>
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.
</p>
        <p>
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.
</p>
        <p>
Let's look at a domain model:
</p>
        <p>
        </p>
        <div style="background: #000000; color: #f2f0df; font-family: monospace">
          <span style="color: teal"> 
0 </span>
          <span style="color: #eeeeee">[</span>Poco<span style="color: #eeeeee">(</span><span style="color: #00ffff">"SimpleRelationshipTestEntities"</span><span style="color: #eeeeee">)]</span><br /><div style="background: #222222"><span style="color: teal">  1 </span><span style="color: #eeeeee"> </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">class</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Customer</span></div><span style="color: teal">  2 </span><span style="color: #eeeeee">{</span><br /><div style="background: #222222"><span style="color: teal">  3 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">int</span><span style="color: #eeeeee"> </span>CustomerID<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span></div><span style="color: teal">  4 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">string</span><span style="color: #eeeeee"> </span>Name<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span><br /><div style="background: #222222"><span style="color: teal">  5 </span></div><span style="color: teal">  6 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #ff80c0">ICollection</span><span style="color: #c0c0c0">&lt;</span><span style="color: #ff0080">Car</span><span style="color: #c0c0c0">&gt;</span><span style="color: #eeeeee"> </span>Cars<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span><br /><div style="background: #222222"><span style="color: teal">  7 </span></div><span style="color: teal">  8 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #ff80c0">ICollection</span><span style="color: #c0c0c0">&lt;</span><span style="color: #ff0080">Order</span><span style="color: #c0c0c0">&gt;</span><span style="color: #eeeeee"> </span>Orders<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span><br /><div style="background: #222222"><span style="color: teal">  9 </span><span style="color: #eeeeee">}</span></div><span style="color: teal">  10 </span><br /><div style="background: #222222"><span style="color: teal">  11 </span><span style="color: #eeeeee">[</span>Poco<span style="color: #eeeeee">(</span><span style="color: #00ffff">"SimpleRelationshipTestEntities"</span><span style="color: #eeeeee">)]</span></div><span style="color: teal">  12 </span><span style="color: #eeeeee"> </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">class</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Car</span><br /><div style="background: #222222"><span style="color: teal">  13 </span><span style="color: #eeeeee">{</span></div><span style="color: teal">  14 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">int</span><span style="color: #eeeeee"> </span>CarID<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span><br /><div style="background: #222222"><span style="color: teal">  15 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">string</span><span style="color: #eeeeee"> </span>Make<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span></div><span style="color: teal">  16 </span><br /><div style="background: #222222"><span style="color: teal">  17 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Customer</span><span style="color: #eeeeee"> </span>Customer<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span></div><span style="color: teal">  18 </span><br /><div style="background: #222222"><span style="color: teal">  19 </span><span style="color: #eeeeee">}</span></div><span style="color: teal">  20 </span><br /><div style="background: #222222"><span style="color: teal">  21 </span><span style="color: #eeeeee">[</span>Poco<span style="color: #eeeeee">(</span><span style="color: #00ffff">"SimpleRelationshipTestEntities"</span><span style="color: #eeeeee">)]</span></div><span style="color: teal">  22 </span><span style="color: #eeeeee"> </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">class</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Order</span><br /><div style="background: #222222"><span style="color: teal">  23 </span><span style="color: #eeeeee">{</span></div><span style="color: teal">  24 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">int</span><span style="color: #eeeeee"> </span>OrderID<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span><br /><div style="background: #222222"><span style="color: teal">  25 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">int</span><span style="color: #eeeeee"> </span>Amount<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span></div><span style="color: teal">  26 </span><br /><div style="background: #222222"><span style="color: teal">  27 </span><span style="color: #eeeeee">  </span><span style="color: #90ee90">public</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Customer</span><span style="color: #eeeeee"> </span>Customer<span style="color: #eeeeee"> { </span><span style="color: #90ee90">get</span><span style="color: #eeeeee">; </span><span style="color: #90ee90">set</span><span style="color: #eeeeee">;
}</span></div><span style="color: teal">  28 </span><br /><div style="background: #222222"><span style="color: teal">  29 </span></div><span style="color: teal">  30 </span><span style="color: #eeeeee">}</span><br /><div style="background: #222222"><span style="color: teal">  31 </span><span style="color: #000000"></span></div></div>
        <p>
        </p>
        <p>
You might notice that I do not expose the concrete EF types, but instead expose ICollections. 
<br />
After compilation, you can use this domainmodel like this:
</p>
        <p>
        </p>
        <div style="background: #000000; color: #f2f0df; font-family: monospace">
          <span style="color: teal"> 
0 </span>
          <span style="color: #eeeeee">   </span>
          <span style="color: #90ee90">using</span>
          <span style="color: #eeeeee"> (</span>
          <span style="color: #ff0080">SimpleRelationshipTestEntities</span>
          <span style="color: #eeeeee"> </span>context<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">new</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">SimpleRelationshipTestEntities</span><span style="color: #eeeeee">())</span><br /><div style="background: #222222"><span style="color: teal">  1 </span><span style="color: #eeeeee">  
{</span></div><span style="color: teal">  2 </span><br /><div style="background: #222222"><span style="color: teal">  3 </span><span style="color: #eeeeee">    </span><span style="color: #90ee90">foreach</span><span style="color: #eeeeee"> (</span><span style="color: #ff0080">Car</span><span style="color: #eeeeee"> </span>oldCar<span style="color: #eeeeee"> </span><span style="color: #90ee90">in</span><span style="color: #eeeeee"> </span>context<span style="color: #c0c0c0">.</span>Car<span style="color: #eeeeee">)</span></div><span style="color: teal">  4 </span><span style="color: #eeeeee">   
{</span><br /><div style="background: #222222"><span style="color: teal">  5 </span><span style="color: #eeeeee">     </span>IRelationshipLoader<span style="color: #eeeeee"> </span>noLazyLoading<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>PostSharp<span style="color: #c0c0c0">.</span><span style="color: #ff0080">Post</span><span style="color: #c0c0c0">.</span>Cast<span style="color: #c0c0c0">&lt;</span><span style="color: #ff0080">Car</span><span style="color: #eeeeee">, </span>IRelationshipLoader<span style="color: #c0c0c0">&gt;</span><span style="color: #eeeeee">(</span>oldCar<span style="color: #eeeeee">);</span></div><span style="color: teal">  6 </span><br /><div style="background: #222222"><span style="color: teal">  7 </span><span style="color: #eeeeee">     </span><span style="color: #90ee90">bool</span><span style="color: #eeeeee"> </span>wasLoaded<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>noLazyLoading<span style="color: #c0c0c0">.</span>IsLoaded<span style="color: #eeeeee">(</span><span style="color: #00ffff">"Customer"</span><span style="color: #eeeeee">);</span></div><span style="color: teal">  8 </span><br /><div style="background: #222222"><span style="color: teal">  9 </span><span style="color: #eeeeee">     </span><span style="color: #ff0080">EntityReference</span><span style="color: #c0c0c0">&lt;</span><span style="color: #ff0080">Customer</span><span style="color: #c0c0c0">&gt;</span><span style="color: #eeeeee"> </span>cu<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>noLazyLoading<span style="color: #c0c0c0">.</span>GetRelatedReference<span style="color: #c0c0c0">&lt;</span><span style="color: #ff0080">Customer</span><span style="color: #c0c0c0">&gt;</span><span style="color: #eeeeee">(</span><span style="color: #00ffff">"Customer"</span><span style="color: #eeeeee">);</span></div><span style="color: teal">  10 </span><span style="color: #eeeeee">     </span>cu<span style="color: #c0c0c0">.</span>Load<span style="color: #eeeeee">();</span><br /><div style="background: #222222"><span style="color: teal">  11 </span></div><span style="color: teal">  12 </span><span style="color: #eeeeee">     </span>wasLoaded<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>noLazyLoading<span style="color: #c0c0c0">.</span>IsLoaded<span style="color: #eeeeee">(</span><span style="color: #00ffff">"Customer"</span><span style="color: #eeeeee">);</span><br /><div style="background: #222222"><span style="color: teal">  13 </span><span style="color: #eeeeee">   
}</span></div><span style="color: teal">  14 </span><br /><div style="background: #222222"><span style="color: teal">  15 </span></div><span style="color: teal">  16 </span><br /><div style="background: #222222"><span style="color: teal">  17 </span><span style="color: #eeeeee">    </span><span style="color: #a4a4a4">//
clear out database</span></div><span style="color: teal">  18 </span><span style="color: #eeeeee">    </span><span style="color: #90ee90">foreach</span><span style="color: #eeeeee"> (</span><span style="color: #ff0080">Customer</span><span style="color: #eeeeee"> </span>old<span style="color: #eeeeee"> </span><span style="color: #90ee90">in</span><span style="color: #eeeeee"> </span>context<span style="color: #c0c0c0">.</span>Customer<span style="color: #eeeeee">)</span><br /><div style="background: #222222"><span style="color: teal">  19 </span><span style="color: #eeeeee">   
{</span></div><span style="color: teal">  20 </span><span style="color: #eeeeee">     </span>IRelationshipLoader<span style="color: #eeeeee"> </span>noLazyLoading<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>PostSharp<span style="color: #c0c0c0">.</span><span style="color: #ff0080">Post</span><span style="color: #c0c0c0">.</span>Cast<span style="color: #c0c0c0">&lt;</span><span style="color: #ff0080">Customer</span><span style="color: #eeeeee">, </span>IRelationshipLoader<span style="color: #c0c0c0">&gt;</span><span style="color: #eeeeee">(</span>old<span style="color: #eeeeee">);</span><br /><div style="background: #222222"><span style="color: teal">  21 </span></div><span style="color: teal">  22 </span><span style="color: #eeeeee">     </span><span style="color: #90ee90">bool</span><span style="color: #eeeeee"> </span>wasLoaded<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>noLazyLoading<span style="color: #c0c0c0">.</span>IsLoaded<span style="color: #eeeeee">(</span><span style="color: #00ffff">"Orders"</span><span style="color: #eeeeee">);</span><br /><div style="background: #222222"><span style="color: teal">  23 </span></div><span style="color: teal">  24 </span><span style="color: #eeeeee">     </span>noLazyLoading<span style="color: #c0c0c0">.</span>Load<span style="color: #eeeeee">(</span><span style="color: #00ffff">"Orders"</span><span style="color: #eeeeee">);</span><br /><div style="background: #222222"><span style="color: teal">  25 </span><span style="color: #eeeeee">     </span>wasLoaded<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>noLazyLoading<span style="color: #c0c0c0">.</span>IsLoaded<span style="color: #eeeeee">(</span><span style="color: #00ffff">"Orders"</span><span style="color: #eeeeee">);</span></div><span style="color: teal">  26 </span><br /><div style="background: #222222"><span style="color: teal">  27 </span><span style="color: #eeeeee">     </span><span style="color: #ff0080">EntityCollection</span><span style="color: #c0c0c0">&lt;</span><span style="color: #ff0080">Order</span><span style="color: #c0c0c0">&gt;</span><span style="color: #eeeeee"> </span>orders<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>noLazyLoading<span style="color: #c0c0c0">.</span>GetRelatedCollection<span style="color: #c0c0c0">&lt;</span><span style="color: #ff0080">Order</span><span style="color: #c0c0c0">&gt;</span><span style="color: #eeeeee">(</span><span style="color: #00ffff">"Orders"</span><span style="color: #eeeeee">); </span></div><span style="color: teal">  28 </span><br /><div style="background: #222222"><span style="color: teal">  29 </span><span style="color: #eeeeee">     </span>context<span style="color: #c0c0c0">.</span>DeleteObject<span style="color: #eeeeee">(</span>old<span style="color: #eeeeee">);</span></div><span style="color: teal">  30 </span><span style="color: #eeeeee">   
}</span><br /><div style="background: #222222"><span style="color: teal">  31 </span><span style="color: #eeeeee">    </span>context<span style="color: #c0c0c0">.</span>SaveChanges<span style="color: #eeeeee">();</span></div><span style="color: teal">  32 </span><br /><div style="background: #222222"><span style="color: teal">  33 </span></div><span style="color: teal">  34 </span><span style="color: #eeeeee">    </span><span style="color: #ff0080">Customer</span><span style="color: #eeeeee"> </span>c<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">new</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Customer</span><span style="color: #eeeeee"> { </span>Name<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #00ffff">"Ruurd
Boeke"</span><span style="color: #eeeeee"> };</span><br /><div style="background: #222222"><span style="color: teal">  35 </span><span style="color: #eeeeee">    </span><span style="color: #ff0080">Customer</span><span style="color: #eeeeee"> </span>c2<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">new</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Customer</span><span style="color: #eeeeee"> { </span>Name<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #00ffff">"Test
Customer"</span><span style="color: #eeeeee"> };</span></div><span style="color: teal">  36 </span><span style="color: #eeeeee">    </span><span style="color: #ff0080">Car</span><span style="color: #eeeeee"> </span>car<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">new</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Car</span><span style="color: #eeeeee"> { </span>Make<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #00ffff">"Ferrari"</span><span style="color: #eeeeee"> };</span><br /><div style="background: #222222"><span style="color: teal">  37 </span><span style="color: #eeeeee">    </span><span style="color: #ff0080">Order</span><span style="color: #eeeeee"> </span>o1<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">new</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Order</span><span style="color: #eeeeee"> { </span>Amount<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #00ffff">10</span><span style="color: #eeeeee"> };</span></div><span style="color: teal">  38 </span><span style="color: #eeeeee">    </span><span style="color: #ff0080">Order</span><span style="color: #eeeeee"> </span>o2<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">new</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Order</span><span style="color: #eeeeee"> { </span>Amount<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #00ffff">20</span><span style="color: #eeeeee"> };</span><br /><div style="background: #222222"><span style="color: teal">  39 </span><span style="color: #eeeeee">    </span><span style="color: #ff0080">Order</span><span style="color: #eeeeee"> </span>o3<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #90ee90">new</span><span style="color: #eeeeee"> </span><span style="color: #ff0080">Order</span><span style="color: #eeeeee"> { </span>Amount<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span><span style="color: #00ffff">30</span><span style="color: #eeeeee"> };</span></div><span style="color: teal">  40 </span><br /><div style="background: #222222"><span style="color: teal">  41 </span><span style="color: #eeeeee">    </span>car<span style="color: #c0c0c0">.</span>Customer<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>c<span style="color: #eeeeee">;</span></div><span style="color: teal">  42 </span><span style="color: #eeeeee">    </span>car<span style="color: #c0c0c0">.</span>Customer<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>c2<span style="color: #eeeeee">;  </span><span style="color: #a4a4a4">//
can re assign test</span><br /><div style="background: #222222"><span style="color: teal">  43 </span></div><span style="color: teal">  44 </span><span style="color: #eeeeee">    </span><span style="color: #a4a4a4">//
add customer on order</span><br /><div style="background: #222222"><span style="color: teal">  45 </span><span style="color: #eeeeee">    </span>o1<span style="color: #c0c0c0">.</span>Customer<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>c<span style="color: #eeeeee">;</span></div><span style="color: teal">  46 </span><span style="color: #eeeeee">    </span>o2<span style="color: #c0c0c0">.</span>Customer<span style="color: #eeeeee"> </span><span style="color: #c0c0c0">=</span><span style="color: #eeeeee"> </span>c<span style="color: #eeeeee">;</span><br /><div style="background: #222222"><span style="color: teal">  47 </span><span style="color: #eeeeee">    </span><span style="color: #a4a4a4">//
add order on customer, new way</span></div><span style="color: teal">  48 </span><span style="color: #eeeeee">    </span>c<span style="color: #c0c0c0">.</span>Orders<span style="color: #c0c0c0">.</span>Add<span style="color: #eeeeee">(</span>o3<span style="color: #eeeeee">);</span><br /><div style="background: #222222"><span style="color: teal">  49 </span></div><span style="color: teal">  50 </span><br /><div style="background: #222222"><span style="color: teal">  51 </span></div><span style="color: teal">  52 </span><span style="color: #eeeeee">    </span>context<span style="color: #c0c0c0">.</span>AddToCustomer<span style="color: #eeeeee">(</span>c<span style="color: #eeeeee">);</span><br /><div style="background: #222222"><span style="color: teal">  53 </span><span style="color: #eeeeee">    </span>context<span style="color: #c0c0c0">.</span>AddToCustomer<span style="color: #eeeeee">(</span>c2<span style="color: #eeeeee">);</span></div><span style="color: teal">  54 </span><span style="color: #eeeeee">    </span>context<span style="color: #c0c0c0">.</span>SaveChanges<span style="color: #eeeeee">();</span><br /><div style="background: #222222"><span style="color: teal">  55 </span><span style="color: #eeeeee">  
}</span></div><span style="color: teal">  56 </span><span style="color: #eeeeee">  }</span><br /></div>
        <p>
        </p>
        <p>
Points of interest: 
<br />
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.
</p>
        <p>
Next up are complex types. When that's done, I'm finished. 
</p>
        <p>
Quite pleased with this actually! ;-)
</p>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=e374f625-6a96-404d-ab81-fc05938db137" />
      </body>
      <title>Relationship support in EFContrib</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,e374f625-6a96-404d-ab81-fc05938db137.aspx</guid>
      <link>http://www.sitechno.com/Blog/RelationshipSupportInEFContrib.aspx</link>
      <pubDate>Mon, 10 Mar 2008 16:56:40 GMT</pubDate>
      <description>&lt;p&gt;
I've been working on the PostSharp4EF project of &lt;a href="http://www.codeplex.com/efcontrib" target="_blank"&gt;EFContrib&lt;/a&gt;.
I'm pleased to announce relationships are now supported.
&lt;/p&gt;
&lt;p&gt;
This actually proved to be somewhat more work, because of all the things that are
happening behind the scenes. 
&lt;br /&gt;
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. 
&lt;br /&gt;
So, I now generate these for you.
&lt;/p&gt;
&lt;p&gt;
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.
&lt;/p&gt;
&lt;p&gt;
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.
&lt;/p&gt;
&lt;p&gt;
Let's look at a domain model:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="background: #000000; color: #f2f0df; font-family: monospace"&gt;&lt;span style="color: teal"&gt;&amp;#160;
0 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;[&lt;/span&gt;Poco&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;SimpleRelationshipTestEntities&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)]&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 1 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;class&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 2 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 3 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;CustomerID&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 4 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;Name&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 5 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 6 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;ICollection&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Car&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;Cars&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 7 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 8 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;ICollection&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Order&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;Orders&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 9 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 10 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 11 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;[&lt;/span&gt;Poco&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;SimpleRelationshipTestEntities&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 12 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;class&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Car&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 13 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 14 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;CarID&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 15 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;string&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;Make&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 16 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 17 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;Customer&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 18 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 19 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 20 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 21 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;[&lt;/span&gt;Poco&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;SimpleRelationshipTestEntities&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;)]&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 22 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;class&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Order&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 23 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 24 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;OrderID&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 25 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;int&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;Amount&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 26 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 27 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;public&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;Customer&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;&lt;span style="color: #90ee90"&gt;get&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;set&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 28 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 29 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 30 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 31 &lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
You might notice that I do not expose the concrete EF types, but instead expose ICollections. 
&lt;br /&gt;
After compilation, you can use this domainmodel like this:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="background: #000000; color: #f2f0df; font-family: monospace"&gt;&lt;span style="color: teal"&gt;&amp;#160;
0 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;using&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SimpleRelationshipTestEntities&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;context&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;SimpleRelationshipTestEntities&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;())&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 1 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 2 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 3 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;foreach&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Car&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;oldCar&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;in&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;context&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Car&lt;span style="color: #eeeeee"&gt;)&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 4 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
{&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 5 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;IRelationshipLoader&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;noLazyLoading&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;PostSharp&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Post&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Cast&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Car&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;IRelationshipLoader&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;oldCar&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 6 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 7 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;bool&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;wasLoaded&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;noLazyLoading&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;IsLoaded&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 8 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 9 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;EntityReference&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;cu&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;noLazyLoading&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;GetRelatedReference&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 10 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;cu&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Load&lt;span style="color: #eeeeee"&gt;();&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 11 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 12 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;wasLoaded&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;noLazyLoading&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;IsLoaded&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Customer&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 13 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 14 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 15 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 16 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 17 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
clear out database&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 18 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;foreach&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; (&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;old&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;in&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;context&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Customer&lt;span style="color: #eeeeee"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 19 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
{&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 20 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;IRelationshipLoader&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;noLazyLoading&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;PostSharp&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Post&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Cast&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;, &lt;/span&gt;IRelationshipLoader&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;old&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 21 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 22 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #90ee90"&gt;bool&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;wasLoaded&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;noLazyLoading&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;IsLoaded&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Orders&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 23 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 24 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;noLazyLoading&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Load&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Orders&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 25 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;wasLoaded&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;noLazyLoading&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;IsLoaded&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Orders&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 26 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 27 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;EntityCollection&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Order&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;orders&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;noLazyLoading&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;GetRelatedCollection&lt;span style="color: #c0c0c0"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Order&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Orders&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;); &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 28 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 29 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;context&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;DeleteObject&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;old&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 30 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160;
}&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 31 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;context&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;SaveChanges&lt;span style="color: #eeeeee"&gt;();&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 32 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 33 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 34 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;c&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;Name&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Ruurd
Boeke&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; };&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 35 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;c2&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Customer&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;Name&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Test
Customer&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; };&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 36 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Car&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;car&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Car&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;Make&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;&amp;quot;Ferrari&amp;quot;&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; };&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 37 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Order&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;o1&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Order&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;Amount&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;10&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; };&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 38 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Order&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;o2&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Order&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;Amount&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;20&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; };&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 39 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0080"&gt;Order&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;o3&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #90ee90"&gt;new&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0080"&gt;Order&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; { &lt;/span&gt;Amount&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00ffff"&gt;30&lt;/span&gt;&lt;span style="color: #eeeeee"&gt; };&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 40 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 41 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;car&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Customer&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;c&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 42 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;car&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Customer&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;c2&lt;span style="color: #eeeeee"&gt;;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
can re assign test&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 43 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 44 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
add customer on order&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 45 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;o1&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Customer&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;c&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 46 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;o2&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Customer&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;=&lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&lt;/span&gt;c&lt;span style="color: #eeeeee"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 47 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a4a4a4"&gt;//
add order on customer, new way&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 48 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;c&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Orders&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;Add&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;o3&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 49 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 50 &lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 51 &lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 52 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;context&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;AddToCustomer&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;c&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 53 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;context&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;AddToCustomer&lt;span style="color: #eeeeee"&gt;(&lt;/span&gt;c2&lt;span style="color: #eeeeee"&gt;);&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 54 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;context&lt;span style="color: #c0c0c0"&gt;.&lt;/span&gt;SaveChanges&lt;span style="color: #eeeeee"&gt;();&lt;/span&gt; 
&lt;br /&gt;
&lt;div style="background: #222222"&gt;&lt;span style="color: teal"&gt;&amp;#160; 55 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160;&amp;#160;
}&lt;/span&gt;
&lt;/div&gt;
&lt;span style="color: teal"&gt;&amp;#160; 56 &lt;/span&gt;&lt;span style="color: #eeeeee"&gt;&amp;#160; }&lt;/span&gt; 
&lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Points of interest: 
&lt;br /&gt;
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.
&lt;/p&gt;
&lt;p&gt;
Next up are complex types. When that's done, I'm finished. 
&lt;/p&gt;
&lt;p&gt;
Quite pleased with this actually! ;-)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=e374f625-6a96-404d-ab81-fc05938db137" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,e374f625-6a96-404d-ab81-fc05938db137.aspx</comments>
      <category>EF (Entity Framework);EF-Contrib</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=53c17be9-fb78-4205-a8e8-7c197f6b9d52</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,53c17be9-fb78-4205-a8e8-7c197f6b9d52.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,53c17be9-fb78-4205-a8e8-7c197f6b9d52.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=53c17be9-fb78-4205-a8e8-7c197f6b9d52</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is the sixth of a series about how to go about using postcompilation in your
solutions. You can read it as a tutorial on how to use PostSharp. I am very much new
to that framework, but the power it provides could seriously change how you build
your applications. While working on the EF contrib project, I had to dive into PostSharp,
and I hope to share some of the things I learned along the way.
</p>
        <p>
This post delves into using the weaver, to do some funky stuff for us!
</p>
        <p>
The full table of contents:
</p>
        <li>
          <a href="http://www.sitechno.com/Blog/IntroducingEntityFrameworkContribEasyIPocoImplementationV01.aspx">Introducing
Entity Framework Contrib- Easy IPoco implementation V 0.1</a>
        </li>
        <li>
          <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartII.aspx">Part
II, Postsharp Core versus Postsharp Laos</a>
        </li>
        <li>
          <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIII.aspx">Part
III, the compound aspect</a>
        </li>
        <li>
          <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIV.aspx">Part
IV, the PocoInterfaceSubaspect (composition aspect)</a>
        </li>
        <li>
          <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartV.aspx" target="_blank">Part
V, hooking up the weaver</a>
        </li>
        <li>
Part VI, the EdmScalarWeaver 
<h5>Recap
</h5><p>
We wish to create an attribute that can be placed on top of our ordinary Poco class,
that will magically transform it into a class that implements the 3 IPoco interfaces.
These are needed by the Entity Framework to do it's work. We will use <a href="http://www.postsharp.org">PostSharp</a> to
do this. 
<br />
Our previous post talked about the compound attribute and how it goes about implementing
interfaces on classes for you. 
</p><p>
We want to put custom attributes on our type that EF needs (the EDM scalar attributes
on top of properties and the EDM type attribute that connects your type to a EDM type).
Laos does not seem to have a ready-to-use aspect that provides that functionality,
so we are going to need to hook into the weaver ourselves! How exciting! 
<br />
Thankfully, we can derive from TypeLevelAspectWeaver to make life easy enough.
</p><p>
In the <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartV.aspx" target="_blank">previous
post</a>, we hooked up the weaver, this post we are actually going to do stuff. 
<br /></p><h5>The Implement method
</h5><p>
Our weaver derives from TypeLevelAspectWeaver, and thus can override the Implement()
method. I have to do some stuff to get to your config file, using PostSharp to get
the Path to the original App.Config. When I have that, I load it, and look at the
connectionstring that matches the containername you have supplied the attribute. Then,
I use the EntityConnectionBuilder to create a connection string and finally load in
the metadata workspace from EDM. With the metadata in hand, I can start looking at
the transformation I have to do.
</p><h5>Setting EDMScalarAttributes
</h5><p>
I recently chatted with Gael (creator of PostSharp) and he assured me that there would
be a highlevel method to add attributes to code. In this version of PostSharp, that
is not directly possible (hence, the weaver we are using). So, we will do it ourselves.
</p><p>
First, let's loop through all the properties defined on our supplied businessEntity:
</p><div style="FONT-FAMILY: courier new"><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
1</span>             <span style="COLOR: blue">foreach</span> (PropertyDeclaration
prop <span style="COLOR: blue">in</span> typeDef.Properties)</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
2</span>             {</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
3</span>                
EdmProperty memberProperty;</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
4</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
5</span>                 <span style="COLOR: green">//
find it as a member</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
6</span>                
memberProperty = entityType.Members.SingleOrDefault(edmprop =&gt; edmprop.Name.Equals(prop.Name)) <span style="COLOR: blue">as</span> EdmProperty;</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
7</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
8</span>                 <span style="COLOR: green">//
it can easily be something else than an edm property</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
9</span>                 <span style="COLOR: blue">if</span> (memberProperty
!= <span style="COLOR: blue">null</span>)</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 10</span>                
{</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 11</span>                     <span style="COLOR: green">//
it might be a key property. I have not yet found a better way to determine if it is
a keymember or not. This seems wastefull</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 12</span>                    
prop.CustomAttributes.Add(</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 13</span>                        
CreatePropertyAttribute(memberProperty,</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 14</span>                        
(entityType.KeyMembers.SingleOrDefault(edmprop =&gt; edmprop.Name.Equals(prop.Name))
!= <span style="COLOR: blue">null</span>)));</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 15</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 16</span>                     <span style="COLOR: blue">continue</span>;</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 17</span>                
}</pre><span style="COLOR: teal">18</span>            
} 
</div><p>
I use a bit of Linq to check if this a propety is a key, and call my CreatePropertyAttribute
method:
</p><div style="FONT-FAMILY: courier new"><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
1</span>         CustomAttributeDeclaration
CreatePropertyAttribute(EdmProperty edmProperty, <span style="COLOR: blue">bool</span> IsKeyProperty)</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
2</span>         {</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
3</span>             CustomAttributeDeclaration
attr = <span style="COLOR: blue">new</span> CustomAttributeDeclaration(edmScalarPropertyAttribute);</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
4</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
5</span>             <span style="COLOR: green">//
nullable</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
6</span>             attr.NamedArguments.Add(</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
7</span>                 <span style="COLOR: blue">new</span> MemberValuePair(MemberKind.Property,</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
8</span>                     <span style="COLOR: maroon">0</span>,</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
9</span>                     <span style="COLOR: maroon">"IsNullable"</span>,</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 10</span>                     <span style="COLOR: blue">new</span> SerializedValue(</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 11</span>                        
SerializationType.GetSerializationType(<span style="COLOR: blue">this</span>.module.FindType(<span style="COLOR: blue">typeof</span>(<span style="COLOR: blue">bool</span>),
BindingOptions.Default)),</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 12</span>                        
edmProperty.Nullable)</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 13</span>                        
));</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 14</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 15</span>             <span style="COLOR: green">//
since we need to set the ordinal, take care to set this property last!</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 16</span>             <span style="COLOR: blue">if</span> (IsKeyProperty)</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 17</span>            
{</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 18</span>                
attr.NamedArguments.Add(</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 19</span>                     <span style="COLOR: blue">new</span> MemberValuePair(MemberKind.Property,</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 20</span>                         <span style="COLOR: maroon">1</span>,</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 21</span>                         <span style="COLOR: maroon">"EntityKeyProperty"</span>,</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 22</span>                         <span style="COLOR: blue">new</span> SerializedValue(</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 23</span>                            
SerializationType.GetSerializationType(<span style="COLOR: blue">this</span>.module.FindType(<span style="COLOR: blue">typeof</span>(<span style="COLOR: blue">bool</span>),
BindingOptions.Default)),</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 24</span>                             <span style="COLOR: maroon">true</span>)</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 25</span>                            
));</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 26</span>            
}</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 27</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 28</span>             <span style="COLOR: blue">return</span> attr;</pre><span style="COLOR: teal">29</span>        
}
</div><p>
As you can see, it get's a little bit more complicated. We need to add a custom attribute,
but to get it, we need to have a constructor for the attribute. I already have it
cached: at line 3 the cached IMethod is given to the PostSharp CustomAttributeDecaration
class. I got to the ctor like this: 
</p><div style="FONT-FAMILY: courier new"><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">            edmScalarPropertyAttribute = module.FindMethod(<span style="COLOR: blue">typeof</span>(EdmScalarPropertyAttribute).GetConstructor(System.Type.EmptyTypes),
BindingOptions.Default); </pre></div><p>
We use PostSharp to find the constructor in the module. 
</p><p>
With the constructor, we can create a customAttributeDeclaration and from there we
can add namedArguments. Note, that here again, we use PostSharp to find types for
us. Kind of confusing, but it does provide a consistent way to do things. You could
use it to call your own methods as well (!).
</p><p>
I do the same for the attribute that needs to be placed on the complete type, and
we are ready!
</p><h5>Default values
</h5><p>
In the EF designer, you have the ability to specify default values for properties.
I needed to mimic this functionality for this project, so I got to work. It seemed
quite simple, because I could get to the fields without a problem. However, fields
are initialized in the ctor of your type (thank you reflector). So more work was needed.
</p><p>
First, I wanted to reuse this weaver, and wanted the weaver to add IL methods in the
constructor. To do that, I implemented the ITypeLevelAdvice interface and added this
line to the end of the implement():
</p><div style="FONT-FAMILY: courier new"><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">            <span style="COLOR: green">//
make sure this class is called to weave</span></pre>
            <span style="COLOR: blue">this</span>.Task.TypeLevelAdvices.Add(<span style="COLOR: blue">this</span>);
</div><p>
Implementing the ITypeLevelAdvice gives us the opportunity to supply some  information
about what we want to do exactly:
</p><div style="FONT-FAMILY: courier new"><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">        <span style="COLOR: blue">#region</span> ITypeLevelAdvice
Members </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none">        <span style="COLOR: blue">public</span> JoinPointKinds
JoinPointKinds { <span style="COLOR: blue">get</span> { <span style="COLOR: blue">return</span> JoinPointKinds.AfterInstanceInitialization;
} } </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none">        <span style="COLOR: blue">public</span> TypeDefDeclaration
Type { <span style="COLOR: blue">get</span> { <span style="COLOR: blue">return</span> (TypeDefDeclaration)<span style="COLOR: blue">this</span>.TargetElement;
} } </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none">        <span style="COLOR: blue">#endregion</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">        <span style="COLOR: blue">#region</span> IAdvice
Members </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none">        <span style="COLOR: blue">public</span> <span style="COLOR: blue">int</span> Priority </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">        {
</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none">            <span style="COLOR: blue">get</span> { <span style="COLOR: blue">return</span> <span style="COLOR: maroon">0</span>;
} </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">        }
</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none">        <span style="COLOR: blue">public</span> <span style="COLOR: blue">bool</span> RequiresWeave(PostSharp.CodeWeaver.WeavingContext
context) </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">        {
</pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none">            <span style="COLOR: blue">return</span> <span style="COLOR: maroon">true</span>; </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">        }
</pre>
        <span style="COLOR: blue">#endregion</span></div><p>
As you can see, I want to use the AfterInstanceInitialization joinpoint. In other
words, I want to be able to weave code, at that moment.
</p><p>
What to weave?? I know everything about my businessentity, but I only know which properties
need default values. So I want to come up with some basic rules about which field
belongs to a certain propertyname:
</p><div style="FONT-FAMILY: courier new"><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
1</span>             <span style="COLOR: blue">#region</span> <span style="COLOR: blue">set</span> <span style="COLOR: blue">default</span> values.
not yet emitting the instruction, but waiting <span style="COLOR: blue">for</span> the
Weave method </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
2</span>             <span style="COLOR: blue">foreach</span> (FieldDefDeclaration
field <span style="COLOR: blue">in</span> typeDef.Fields) </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
3</span>             { </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
4</span>                 <span style="COLOR: green">//
we have to make concessions: we do not know how to find the field with the property
exactly</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
5</span>                
EdmProperty memberProperty; </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
6</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
7</span>                 <span style="COLOR: green">//
find it as a member</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
8</span>                 <span style="COLOR: green">//
the rules: the field must match the ending of the propertyname. So underscore is okay</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
9</span>                
memberProperty = entityType.Members.SingleOrDefault(edmprop =&gt; field.Name.EndsWith(edmprop.Name,
StringComparison.OrdinalIgnoreCase) ) <span style="COLOR: blue">as</span> EdmProperty; </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 10</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 11</span>                 <span style="COLOR: green">//
in case that didn't match, try the autogenerated fieldname</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 12</span>                 <span style="COLOR: blue">if</span> (memberProperty
== <span style="COLOR: blue">null</span>) </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 13</span>                
{ </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 14</span>                    
memberProperty = entityType.Members.SingleOrDefault(edmprop =&gt; (field.Name.IndexOf(<span style="COLOR: maroon">"&lt;"</span> +
edmprop.Name + <span style="COLOR: maroon">"&gt;"</span>) == <span style="COLOR: maroon">0</span>)) <span style="COLOR: blue">as</span> EdmProperty; </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 15</span>                
} </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 16</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 17</span>                 <span style="COLOR: green">//
if this field belongs to a edm property, we can check for it's default value</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 18</span>                 <span style="COLOR: blue">if</span> (memberProperty
!= <span style="COLOR: blue">null</span>) </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 19</span>                
{ </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 20</span>                    
FieldsNeedingDefaultValue.Add(field, memberProperty.Default); </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 21</span>                
} </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 22</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 23</span>            
}  </pre><span style="COLOR: teal">24</span>             <span style="COLOR: blue">#endregion</span></div><p>
I use two rules: if the field ends with the same name as the property, then this field
belongs to that property. Another rule is, to look at the naming scheme that the compiler
uses when it generates auto properties: &lt;Propertyname&gt;_k_backingfield;. Since
that is how we will most likely use this whole project, I want to also support that. 
<br />
I build up a default value dictionary that I use in a later stadium.
</p><p>
The weave method will be called when our joinpoint has been reached. 
</p><div style="FONT-FAMILY: courier new"><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
1</span>         <span style="COLOR: blue">public</span> <span style="COLOR: blue">void</span> Weave(PostSharp.CodeWeaver.WeavingContext
context, InstructionBlock block) </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
2</span>         { </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
3</span>             <span style="COLOR: blue">foreach</span> (FieldDefDeclaration
field <span style="COLOR: blue">in</span> FieldsNeedingDefaultValue.Keys) </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
4</span>             { </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
5</span>                 <span style="COLOR: blue">object</span> value
= FieldsNeedingDefaultValue[field]; </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
6</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
7</span>                 <span style="COLOR: blue">if</span> (value
== <span style="COLOR: blue">null</span>) </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
8</span>                     <span style="COLOR: blue">continue</span>; </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 
9</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 10</span>                 <span style="COLOR: green">//
the context is the ctor because we only use the joinpoint AfterinstanceInitialization</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 11</span>                
InstructionSequence sequence = context.Method.MethodBody.CreateInstructionSequence(); </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 12</span>                
block.AddInstructionSequence(sequence, NodePosition.Before, <span style="COLOR: blue">null</span>); </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 13</span>                
context.InstructionWriter.AttachInstructionSequence(sequence); </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 14</span>                
InstructionWriter writer = context.InstructionWriter; </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 15</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 16</span>                 <span style="COLOR: blue">if</span>(value <span style="COLOR: blue">is</span> <span style="COLOR: blue">int</span>) </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 17</span>                
{ </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 18</span>                            
writer.EmitInstruction(OpCodeNumber.Nop); </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 19</span>                            
writer.EmitInstruction(OpCodeNumber.Ldarg_0); </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 20</span>                            
writer.EmitInstructionInt32(OpCodeNumber.Ldc_I4, (<span style="COLOR: blue">int</span>)value
); </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 21</span>                            
writer.EmitInstructionField(OpCodeNumber.Stfld, field);               
} </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 22</span>                 <span style="COLOR: blue">else</span> <span style="COLOR: blue">if</span> (value <span style="COLOR: blue">is</span> <span style="COLOR: blue">string</span>) </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 23</span>                
{ </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 24</span>                            
writer.EmitInstruction(OpCodeNumber.Nop); </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 25</span>                            
writer.EmitInstruction(OpCodeNumber.Ldarg_0); </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 26</span>                            
writer.EmitInstructionString(OpCodeNumber.Ldstr, (<span style="COLOR: blue">string</span>)value); </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 27</span>                            
writer.EmitInstructionField(OpCodeNumber.Stfld, field);               
} </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 28</span>                 <span style="COLOR: blue">else</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 29</span>                
{ </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 30</span>                     <span style="COLOR: green">//
TODO: implement other value types</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 31</span>                     <span style="COLOR: blue">throw</span> <span style="COLOR: blue">new</span> NotImplementedException(String.Format(<span style="COLOR: maroon">"No
IL default implemented for type {0}"</span>, value.GetType())); </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 32</span>                
} </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 33</span></pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 34</span>                
writer.DetachInstructionSequence(<span style="COLOR: maroon">true</span>); </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 35</span>            
} </pre><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"><span style="COLOR: teal"> 36</span></pre><span style="COLOR: teal">37</span>        
}
</div><p>
Again, Gael has assured me that a highlevel functionality will be created to easily
set default values. I do not like to work with a big IF statement to inject different
IL instructions per type, but that's it for now....
</p><p>
I just use reflector, in IL viewing mode, to see how I should initialize a certain
type, and off we go.
</p><p>
 
</p><p>
This is the end of this series. I hope you enjoyed it.
</p><p>
The following things still have to be done:
</p><ul><li>
PostSharp can now be installed without using the GAC. I think people feel more at
ease just using an external assembly, so I will change the EFContrib project to support
this. 
</li><li>
Relationships and complex types need to be supported 
</li><li>
Obviously, the other default values need to be supported.</li></ul><p>
I'll keep you updated on how that progresses!<br />
I hope this series has given you some ideas on how to use postcompiling in your own
project. Let it make your life easier and your code cleaner. 
</p></li>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=53c17be9-fb78-4205-a8e8-7c197f6b9d52" />
      </body>
      <title>Postcompiling for Entity Framework: Part VI</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,53c17be9-fb78-4205-a8e8-7c197f6b9d52.aspx</guid>
      <link>http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartVI.aspx</link>
      <pubDate>Mon, 25 Feb 2008 14:56:01 GMT</pubDate>
      <description>&lt;p&gt;
This is the sixth of a series about how to go about using postcompilation in your
solutions. You can read it as a tutorial on how to use PostSharp. I am very much new
to that framework, but the power it provides could seriously change how you build
your applications. While working on the EF contrib project, I had to dive into PostSharp,
and I hope to share some of the things I learned along the way.
&lt;/p&gt;
&lt;p&gt;
This post delves into using the weaver, to do some funky stuff for us!
&lt;/p&gt;
&lt;p&gt;
The full table of contents:
&lt;/p&gt;
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/IntroducingEntityFrameworkContribEasyIPocoImplementationV01.aspx"&gt;Introducing
Entity Framework Contrib- Easy IPoco implementation V 0.1&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartII.aspx"&gt;Part
II, Postsharp Core versus Postsharp Laos&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIII.aspx"&gt;Part
III, the compound aspect&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIV.aspx"&gt;Part
IV, the PocoInterfaceSubaspect (composition aspect)&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartV.aspx" target=_blank&gt;Part
V, hooking up the weaver&lt;/a&gt; 
&lt;li&gt;
Part VI, the EdmScalarWeaver 
&lt;h5&gt;Recap
&lt;/h5&gt;
&lt;p&gt;
We wish to create an attribute that can be placed on top of our ordinary Poco class,
that will magically transform it into a class that implements the 3 IPoco interfaces.
These are needed by the Entity Framework to do it's work. We will use &lt;a href="http://www.postsharp.org"&gt;PostSharp&lt;/a&gt; to
do this. 
&lt;br&gt;
Our previous post talked about the compound attribute and how it goes about implementing
interfaces on classes for you. 
&lt;/p&gt;
&lt;p&gt;
We want to put custom attributes on our type that EF needs (the EDM scalar attributes
on top of properties and the EDM type attribute that connects your type to a EDM type).
Laos does not seem to have a ready-to-use aspect that provides that functionality,
so we are going to need to hook into the weaver ourselves! How exciting! 
&lt;br&gt;
Thankfully, we can derive from TypeLevelAspectWeaver to make life easy enough.
&lt;/p&gt;
&lt;p&gt;
In the &lt;a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartV.aspx" target=_blank&gt;previous
post&lt;/a&gt;, we hooked up the weaver, this post we are actually going to do stuff. 
&lt;br&gt;
&lt;/p&gt;
&lt;h5&gt;The Implement method
&lt;/h5&gt;
&lt;p&gt;
Our weaver derives from TypeLevelAspectWeaver, and thus can override the Implement()
method. I have to do some stuff to get to your config file, using PostSharp to get
the Path to the original App.Config. When I have that, I load it, and look at the
connectionstring that matches the containername you have supplied the attribute. Then,
I use the EntityConnectionBuilder to create a connection string and finally load in
the metadata workspace from EDM. With the metadata in hand, I can start looking at
the transformation I have to do.
&lt;/p&gt;
&lt;h5&gt;Setting EDMScalarAttributes
&lt;/h5&gt;
&lt;p&gt;
I recently chatted with Gael (creator of PostSharp) and he assured me that there would
be a highlevel method to add attributes to code. In this version of PostSharp, that
is not directly possible (hence, the weaver we are using). So, we will do it ourselves.
&lt;/p&gt;
&lt;p&gt;
First, let's loop through all the properties defined on our supplied businessEntity:
&lt;/p&gt;
&lt;div style="FONT-FAMILY: courier new"&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (PropertyDeclaration
prop &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; typeDef.Properties)&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
EdmProperty memberProperty;&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
4&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
find it as a member&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
memberProperty = entityType.Members.SingleOrDefault(edmprop =&amp;gt; edmprop.Name.Equals(prop.Name)) &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; EdmProperty;&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
7&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
it can easily be something else than an edm property&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (memberProperty
!= &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
it might be a key property. I have not yet found a better way to determine if it is
a keymember or not. This seems wastefull&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
prop.CustomAttributes.Add(&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
CreatePropertyAttribute(memberProperty,&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
(entityType.KeyMembers.SingleOrDefault(edmprop =&amp;gt; edmprop.Name.Equals(prop.Name))
!= &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)));&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 15&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;continue&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/pre&gt;
&lt;span style="COLOR: teal"&gt;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
} 
&lt;/div&gt;
&lt;p&gt;
I use a bit of Linq to check if this a propety is a key, and call my CreatePropertyAttribute
method:
&lt;/p&gt;
&lt;div style="FONT-FAMILY: courier new"&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CustomAttributeDeclaration
CreatePropertyAttribute(EdmProperty edmProperty, &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; IsKeyProperty)&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CustomAttributeDeclaration
attr = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; CustomAttributeDeclaration(edmScalarPropertyAttribute);&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
4&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
nullable&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; attr.NamedArguments.Add(&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; MemberValuePair(MemberKind.Property,&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: maroon"&gt;0&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: maroon"&gt;"IsNullable"&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; SerializedValue(&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
SerializationType.GetSerializationType(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.module.FindType(&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;bool&lt;/span&gt;),
BindingOptions.Default)),&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
edmProperty.Nullable)&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
));&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 14&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
since we need to set the ordinal, take care to set this property last!&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (IsKeyProperty)&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
attr.NamedArguments.Add(&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; MemberValuePair(MemberKind.Property,&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: maroon"&gt;1&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: maroon"&gt;"EntityKeyProperty"&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; SerializedValue(&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
SerializationType.GetSerializationType(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.module.FindType(&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;bool&lt;/span&gt;),
BindingOptions.Default)),&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: maroon"&gt;true&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
));&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 27&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; attr;&lt;/pre&gt;
&lt;span style="COLOR: teal"&gt;29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}
&lt;/div&gt;
&lt;p&gt;
As you can see, it get's a little bit more complicated. We need to add a custom attribute,
but to get it, we need to have a constructor for the attribute. I already have it
cached: at line 3 the cached IMethod is given to the PostSharp CustomAttributeDecaration
class. I got to the ctor like this: 
&lt;/p&gt;
&lt;div style="FONT-FAMILY: courier new"&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; edmScalarPropertyAttribute = module.FindMethod(&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(EdmScalarPropertyAttribute).GetConstructor(System.Type.EmptyTypes),
BindingOptions.Default); &lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
We use PostSharp to find the constructor in the module. 
&lt;/p&gt;
&lt;p&gt;
With the constructor, we can create a customAttributeDeclaration and from there we
can add namedArguments. Note, that here again, we use PostSharp to find types for
us. Kind of confusing, but it does provide a consistent way to do things. You could
use it to call your own methods as well (!).
&lt;/p&gt;
&lt;p&gt;
I do the same for the attribute that needs to be placed on the complete type, and
we are ready!
&lt;/p&gt;
&lt;h5&gt;Default values
&lt;/h5&gt;
&lt;p&gt;
In the EF designer, you have the ability to specify default values for properties.
I needed to mimic this functionality for this project, so I got to work. It seemed
quite simple, because I could get to the fields without a problem. However, fields
are initialized in the ctor of your type (thank you reflector). So more work was needed.
&lt;/p&gt;
&lt;p&gt;
First, I wanted to reuse this weaver, and wanted the weaver to add IL methods in the
constructor. To do that, I implemented the ITypeLevelAdvice interface and added this
line to the end of the implement():
&lt;/p&gt;
&lt;div style="FONT-FAMILY: courier new"&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
make sure this class is called to weave&lt;/span&gt; &lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Task.TypeLevelAdvices.Add(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;);
&lt;/div&gt;
&lt;p&gt;
Implementing the ITypeLevelAdvice gives us the opportunity to supply some&amp;nbsp; information
about what we want to do exactly:
&lt;/p&gt;
&lt;div style="FONT-FAMILY: courier new"&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#region&lt;/span&gt; ITypeLevelAdvice
Members &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; JoinPointKinds
JoinPointKinds { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; JoinPointKinds.AfterInstanceInitialization;
} } &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; TypeDefDeclaration
Type { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; (TypeDefDeclaration)&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.TargetElement;
} } &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#endregion&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#region&lt;/span&gt; IAdvice
Members &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; Priority &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: maroon"&gt;0&lt;/span&gt;;
} &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; RequiresWeave(PostSharp.CodeWeaver.WeavingContext
context) &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: maroon"&gt;true&lt;/span&gt;; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#endregion&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;
As you can see, I want to use the AfterInstanceInitialization joinpoint. In other
words, I want to be able to weave code, at that moment.
&lt;/p&gt;
&lt;p&gt;
What to weave?? I know everything about my businessentity, but I only know which properties
need default values. So I want to come up with some basic rules about which field
belongs to a certain propertyname:
&lt;/p&gt;
&lt;div style="FONT-FAMILY: courier new"&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#region&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;set&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;default&lt;/span&gt; values.
not yet emitting the instruction, but waiting &lt;span style="COLOR: blue"&gt;for&lt;/span&gt; the
Weave method &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (FieldDefDeclaration
field &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; typeDef.Fields) &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
we have to make concessions: we do not know how to find the field with the property
exactly&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
EdmProperty memberProperty; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
6&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
find it as a member&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
the rules: the field must match the ending of the propertyname. So underscore is okay&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
memberProperty = entityType.Members.SingleOrDefault(edmprop =&amp;gt; field.Name.EndsWith(edmprop.Name,
StringComparison.OrdinalIgnoreCase) ) &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; EdmProperty; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 10&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
in case that didn't match, try the autogenerated fieldname&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (memberProperty
== &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;) &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{ &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
memberProperty = entityType.Members.SingleOrDefault(edmprop =&amp;gt; (field.Name.IndexOf(&lt;span style="COLOR: maroon"&gt;"&amp;lt;"&lt;/span&gt; +
edmprop.Name + &lt;span style="COLOR: maroon"&gt;"&amp;gt;"&lt;/span&gt;) == &lt;span style="COLOR: maroon"&gt;0&lt;/span&gt;)) &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; EdmProperty; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
} &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 16&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
if this field belongs to a edm property, we can check for it's default value&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (memberProperty
!= &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;) &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{ &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
FieldsNeedingDefaultValue.Add(field, memberProperty.Default); &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
} &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 22&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&amp;nbsp; &lt;/pre&gt;
&lt;span style="COLOR: teal"&gt;24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#endregion&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;
I use two rules: if the field ends with the same name as the property, then this field
belongs to that property. Another rule is, to look at the naming scheme that the compiler
uses when it generates auto properties: &amp;lt;Propertyname&amp;gt;_k_backingfield;. Since
that is how we will most likely use this whole project, I want to also support that. 
&lt;br&gt;
I build up a default value dictionary that I use in a later stadium.
&lt;/p&gt;
&lt;p&gt;
The weave method will be called when our joinpoint has been reached. 
&lt;/p&gt;
&lt;div style="FONT-FAMILY: courier new"&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Weave(PostSharp.CodeWeaver.WeavingContext
context, InstructionBlock block) &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (FieldDefDeclaration
field &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; FieldsNeedingDefaultValue.Keys) &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;object&lt;/span&gt; value
= FieldsNeedingDefaultValue[field]; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
6&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (value
== &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;) &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;continue&lt;/span&gt;; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp;
9&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
the context is the ctor because we only use the joinpoint AfterinstanceInitialization&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
InstructionSequence sequence = context.Method.MethodBody.CreateInstructionSequence(); &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
block.AddInstructionSequence(sequence, NodePosition.Before, &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;); &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
context.InstructionWriter.AttachInstructionSequence(sequence); &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
InstructionWriter writer = context.InstructionWriter; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 15&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt;(value &lt;span style="COLOR: blue"&gt;is&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt;) &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{ &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
writer.EmitInstruction(OpCodeNumber.Nop); &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
writer.EmitInstruction(OpCodeNumber.Ldarg_0); &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
writer.EmitInstructionInt32(OpCodeNumber.Ldc_I4, (&lt;span style="COLOR: blue"&gt;int&lt;/span&gt;)value
); &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
writer.EmitInstructionField(OpCodeNumber.Stfld, field);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
} &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (value &lt;span style="COLOR: blue"&gt;is&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;) &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{ &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
writer.EmitInstruction(OpCodeNumber.Nop); &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
writer.EmitInstruction(OpCodeNumber.Ldarg_0); &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
writer.EmitInstructionString(OpCodeNumber.Ldstr, (&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;)value); &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
writer.EmitInstructionField(OpCodeNumber.Stfld, field);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
} &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;else&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{ &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
TODO: implement other value types&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; NotImplementedException(String.Format(&lt;span style="COLOR: maroon"&gt;"No
IL default implemented for type {0}"&lt;/span&gt;, value.GetType())); &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
} &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 33&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
writer.DetachInstructionSequence(&lt;span style="COLOR: maroon"&gt;true&lt;/span&gt;); &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 35&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
} &lt;/pre&gt;
&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: teal"&gt; 36&lt;/span&gt; &lt;/pre&gt;
&lt;span style="COLOR: teal"&gt;37&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}
&lt;/div&gt;
&lt;p&gt;
Again, Gael has assured me that a highlevel functionality will be created to easily
set default values. I do not like to work with a big IF statement to inject different
IL instructions per type, but that's it for now....
&lt;/p&gt;
&lt;p&gt;
I just use reflector, in IL viewing mode, to see how I should initialize a certain
type, and off we go.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
This is the end of this series. I hope you enjoyed it.
&lt;/p&gt;
&lt;p&gt;
The following things still have to be done:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
PostSharp can now be installed without using the GAC. I think people feel more at
ease just using an external assembly, so I will change the EFContrib project to support
this. 
&lt;li&gt;
Relationships and complex types need to be supported 
&lt;li&gt;
Obviously, the other default values need to be supported.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I'll keep you updated on how that progresses!&lt;br&gt;
I hope this series has given you some ideas on how to use postcompiling in your own
project. Let it make your life easier and your code cleaner. 
&lt;/p&gt;
&lt;/li&gt;&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=53c17be9-fb78-4205-a8e8-7c197f6b9d52" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,53c17be9-fb78-4205-a8e8-7c197f6b9d52.aspx</comments>
      <category>EF-Contrib</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=f4298397-a4fc-454f-94b5-ba8d238a30d1</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,f4298397-a4fc-454f-94b5-ba8d238a30d1.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,f4298397-a4fc-454f-94b5-ba8d238a30d1.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f4298397-a4fc-454f-94b5-ba8d238a30d1</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is the fifth of a series about how to go about using postcompilation in your
solutions. You can read it as a tutorial on how to use PostSharp. I am very much new
to that framework, but the power it provides could seriously change how you build
your applications. While working on the EF contrib project, I had to dive into PostSharp,
and I hope to share some of the things I learned along the way.
</p>
        <p>
This post introduces the weaver, that will do exciting stuff for us.
</p>
        <p>
The full table of contents:
</p>
        <li>
          <a href="http://www.sitechno.com/Blog/IntroducingEntityFrameworkContribEasyIPocoImplementationV01.aspx">Introducing
Entity Framework Contrib- Easy IPoco implementation V 0.1</a>
        </li>
        <li>
          <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartII.aspx">Part
II, Postsharp Core versus Postsharp Laos</a>
        </li>
        <li>
          <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIII.aspx">Part
III, the compound aspect</a>
        </li>
        <li>
          <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIV.aspx" target="_blank">Part
IV, the PocoInterfaceSubaspect (composition aspect)</a>
        </li>
        <li>
Part V, hooking up the weaver 
</li>
        <li>
Part VI, the EdmScalarWeaver 
<h5>Recap
</h5><p>
We wish to create an attribute that can be placed on top of our ordinary Poco class,
that will magically transform it into a class that implements the 3 IPoco interfaces.
These are needed by the Entity Framework to do it's work. We will use <a href="http://www.postsharp.org">PostSharp</a> to
do this. 
<br />
Our previous post talked about the compound attribute and how it goes about implementing
interfaces on classes for you. 
</p><p>
This post will look at how we are going to hook up a weaver to do more complex stuff,
not directly supported by the provided Laos aspects.
</p><p>
But first I want to clear up a statement I made <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartII.aspx" target="_blank">here</a>:
'I found it wildly confusing the first time I came across the two parts of postsharp.
Laos is such a high-level abstraction, that you use it quite differently from Core.
In the latter, you have to spinup your own weaver, in Laos you do not ever see a weaver.
' 
<br />
It is not true that you do not ever see a weaver when using Laos. I should have been
more clear: Laos offers a great deal of functionality that you can use without going
into a weaver. 
</p><p>
We want to put custom attributes on our type that EF needs (the EDM scalar attributes
on top of properties and the EDM type attribute that connects your type to a EDM type).
Laos does not seem to have a ready-to-use aspect that provides that functionality,
so we are going to need to hook into the weaver ourselves! How exciting! 
<br />
Thankfully, we can derive from TypeLevelAspectWeaver to make life easy enough.
</p><h5>Hooking up a weaver
</h5><p>
The cool thing about using the weaver is, that you can put it in it's own assembly
and not have to reference it in the assemblies that you are postcompiling. That is
quite important, because the weaver depends on PostSharp.Core and there is another
license attached to it. 
<br />
The PocoAttribute adds an aspect to the collection, like it did for the other aspects:
</p><div style="FONT-FAMILY: courier new"><span style="COLOR: teal">  1</span><span style="COLOR: blue">public</span> <span style="COLOR: blue">override</span> <span style="COLOR: blue">void</span> ProvideAspects(<span style="COLOR: blue">object</span> element,
LaosReflectionAspectCollection collection) 
<br /><span style="COLOR: teal">  2</span>        
{ 
<br /><span style="COLOR: teal">  3</span>             <span style="COLOR: green">//
Get the target type.</span><br /><span style="COLOR: teal">  4</span>            
Type targetType = (Type)element; 
<br /><span style="COLOR: teal">  5</span><br /><span style="COLOR: teal">  6</span> .... 
<br /><span style="COLOR: teal">10</span>             <span style="COLOR: green">//
inspect the complete class and add EDM scalar attributes to the properties</span><br /><span style="COLOR: teal">11</span>            
collection.AddAspect(targetType, <span style="COLOR: blue">new</span> EDMAttributesSubAspect(<span style="COLOR: blue">this</span>.EDMContainerName,
Name, NamespaceName, PathToConfigFile)); 
</div><div style="FONT-FAMILY: courier new">..... 
<br /><span style="COLOR: teal">12</span> }
</div><p>
At line 11, the EDMAttributesSubAspect is added. This means that when Laos is ready
to start working, it will check that aspect to see what it should do. Let's look at
it now:
</p><div style="FONT-FAMILY: courier new">    [Serializable] 
<br />
    <span style="COLOR: blue">internal</span> <span style="COLOR: blue">class</span> EDMAttributesSubAspect
: ILaosTypeLevelAspect 
<br />
    { 
<br />
        <span style="COLOR: blue">#region</span> fields
and properties 
<br />
        <span style="COLOR: blue">internal</span> <span style="COLOR: blue">string</span> EDMContainerName
{ <span style="COLOR: blue">get</span>; <span style="COLOR: blue">set</span>; } 
<br /><br />
        <span style="COLOR: blue">internal</span> <span style="COLOR: blue">string</span> TypeName
{ <span style="COLOR: blue">get</span>; <span style="COLOR: blue">set</span>; } 
<br />
        <span style="COLOR: blue">internal</span> <span style="COLOR: blue">string</span> NamespaceName
{ <span style="COLOR: blue">get</span>; <span style="COLOR: blue">set</span>; } 
<br />
        <span style="COLOR: blue">internal</span> <span style="COLOR: blue">string</span> PathToConfigFile
{ <span style="COLOR: blue">get</span>; <span style="COLOR: blue">set</span>; } 
<br />
        <span style="COLOR: blue">#endregion</span><br /><br />
        <span style="COLOR: blue">#region</span> ctor 
<br />
        <span style="COLOR: gray">/// &lt;summary&gt;</span><br />
        <span style="COLOR: gray">/// ctor</span><br />
        <span style="COLOR: gray">/// &lt;/summary&gt;</span><br />
        <span style="COLOR: gray">/// &lt;param
name="EDMContainerName"&gt;the container name&lt;/param&gt;</span><br />
        <span style="COLOR: gray">/// &lt;param
name="NamespaceName"&gt;namespacename, can be null&lt;/param&gt;</span><br />
        <span style="COLOR: gray">/// &lt;param
name="TypeName"&gt;typename, can be null&lt;/param&gt;</span><br />
        <span style="COLOR: blue">public</span> EDMAttributesSubAspect(<span style="COLOR: blue">string</span> EDMContainerName, <span style="COLOR: blue">string</span> TypeName, <span style="COLOR: blue">string</span> NamespaceName, <span style="COLOR: blue">string</span> PathToConfigFile) 
<br />
        { 
<br />
            <span style="COLOR: blue">this</span>.EDMContainerName
= EDMContainerName; 
<br />
            <span style="COLOR: blue">this</span>.TypeName
= TypeName; 
<br />
            <span style="COLOR: blue">this</span>.NamespaceName
= NamespaceName; 
<br />
            <span style="COLOR: blue">this</span>.PathToConfigFile
= PathToConfigFile; 
<br />
        }  
<br />
        <span style="COLOR: blue">#endregion</span><br /><br />
        <span style="COLOR: blue">#region</span> ILaosTypeLevelAspect
Members 
<br /><br />
        <span style="COLOR: blue">public</span> <span style="COLOR: blue">void</span> CompileTimeInitialize(Type
type) 
<br />
        { 
<br />
        } 
<br /><br />
        <span style="COLOR: blue">public</span> <span style="COLOR: blue">bool</span> CompileTimeValidate(Type
type) 
<br />
        { 
<br />
            <span style="COLOR: blue">return</span> <span style="COLOR: maroon">true</span>; 
<br />
        } 
<br /><br />
        <span style="COLOR: blue">public</span> <span style="COLOR: blue">void</span> RuntimeInitialize(Type
type) 
<br />
        { 
<br />
        } 
<br /><br />
        <span style="COLOR: blue">#endregion</span><br /><br />
        <span style="COLOR: blue">#region</span> ILaosWeavableAspect
Members 
<br /><br />
        <span style="COLOR: blue">public</span> <span style="COLOR: blue">int</span> AspectPriority 
<br />
        { 
<br />
            <span style="COLOR: blue">get</span> { <span style="COLOR: blue">return</span> <span style="COLOR: blue">int</span>.MinValue;
} 
<br />
        } 
<br /><br />
        <span style="COLOR: blue">#endregion</span>  
<br /><br />
    }
</div><p>
You might be surprised to hear that this is the complete aspect!! Nothing that hints
at what is to come. 
</p><p>
When such a thing happens, you might be stumped. But obviously you will immediately
think to check the assemblyinfo file of the PostSharp4EF assembly:
</p><div style="FONT-FAMILY: courier new">[assembly: PostSharp.Extensibility.ReferencingAssembliesRequirePostSharp(<span style="COLOR: maroon">"PocoTypeWeaver"</span>, <span style="COLOR: maroon">"EntityFrameworkContrib.PostSharp4EF.Weaver"</span>)] 
<br />
[assembly: InternalsVisibleTo(<span style="COLOR: maroon">"EntityFrameworkContrib.PostSharp4EF.Weaver"</span>)]
</div><p>
Okay, I was kidding. You wouldn't have thought of that. ;-)
</p><p>
The first statement there, instructs PostSharp to look for a plugin, with name PocoTypeWeaver
to process all assemblies that are referencing this assembly. It is just another way
of expressing requirements. I could have put that inside the attribute. But I did
not. 
</p><p>
The plugin file can be found in the weaver assembly. It is just a normal text file
with naming convention that matches the entire assembly name + "psplugin". The contents
of that file:
</p><pre><span style="COLOR: blue">&lt;?</span><span style="COLOR: maroon">xml</span><span style="COLOR: red">version</span>="<span style="COLOR: blue">1.0</span>" <span style="COLOR: red">encoding</span>="<span style="COLOR: blue">utf-8</span>" <span style="COLOR: blue">?&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">PlugIn</span><span style="COLOR: red">xmlns</span>="<span style="COLOR: blue">http://schemas.postsharp.org/1.0/configuration</span>"<span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">TaskType</span><span style="COLOR: red">Name</span>="<span style="COLOR: blue">PocoTypeWeaver</span>" <span style="COLOR: red">Implementation</span>="<span style="COLOR: blue">EntityFrameworkContrib.PostSharp4EF.Weaver.PocoEDMAttributesWeaverFactory,
EntityFrameworkContrib.PostSharp4EF.Weaver</span>"<span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span>/<span style="COLOR: maroon">TaskType</span><span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span>/<span style="COLOR: maroon">PlugIn</span><span style="COLOR: blue">&gt;</span></pre><p>
Here you will see a task PocoTypeWeaver and a reference to an implementation of a
weaver factory. So, our PocoAttribute needs the pocoTypeWeaver and it can get one
through the use of a factory. But, since your client assembly will not have a reference
to this weaver assembly (which contains this mapping file), we need some way to tell
it where to look. Enter the psproj file that was put inside your client assembly:
</p><pre><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">Project</span><span style="COLOR: red">xmlns</span>="<span style="COLOR: blue">http://schemas.postsharp.org/1.0/configuration</span>"<span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">SearchPath</span><span style="COLOR: red">Directory</span>="<span style="COLOR: blue">../EntityFrameworkContrib.PostSharp4EF.Weaver/bin/{$Configuration}</span>"/<span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">SearchPath</span><span style="COLOR: red">Directory</span>="<span style="COLOR: blue">{$SearchPath}</span>"
/<span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">Tasks</span><span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">AutoDetect</span> /<span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">Compile</span><span style="COLOR: red">TargetFile</span>="<span style="COLOR: blue">{$Output}</span>" <span style="COLOR: red">IntermediateDirectory</span>="<span style="COLOR: blue">{$IntermediateDirectory}</span>" <span style="COLOR: red">CleanIntermediate</span>="<span style="COLOR: blue">false</span>"
/<span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span>/<span style="COLOR: maroon">Tasks</span><span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span>/<span style="COLOR: maroon">Project</span><span style="COLOR: blue">&gt;</span></pre><p>
This psproj file is used by postsharp to extend it's searchpath. This means that on
machines that are building the solution, you will need to supply some path where PostSharp
can find the just mentioned psplugin file.
</p><p>
Please note: there are other ways to configure the searchpath and possibly better
ways to setup a system like this. There is a default searchpath and you could also
put your plugin file there.
</p><h5>The weaver factory
</h5><div style="FONT-FAMILY: courier new">    <span style="COLOR: blue">public</span> <span style="COLOR: blue">class</span> PocoEDMAttributesWeaverFactory
: Task, ILaosAspectWeaverFactory 
<br />
    { 
<br /><br />
        <span style="COLOR: blue">#region</span> ILaosAspectWeaverFactory
Members 
<br />
        <span style="COLOR: gray">/// &lt;summary&gt;</span><br />
        <span style="COLOR: gray">/// creates the
weaver</span><br />
        <span style="COLOR: gray">/// &lt;/summary&gt;</span><br />
        <span style="COLOR: gray">/// &lt;param
name="aspect"&gt;the EDMAttributesSubAspect that instantiated this factory&lt;/param&gt;</span><br />
        <span style="COLOR: gray">/// &lt;returns&gt;the
weaver that will do the lowlever hardcore work&lt;/returns&gt;</span><br />
        <span style="COLOR: blue">public</span> LaosAspectWeaver
CreateAspectWeaver(PostSharp.Laos.ILaosAspect aspect) 
<br />
        { 
<br />
            <span style="COLOR: blue">if</span> (aspect <span style="COLOR: blue">is</span> EDMAttributesSubAspect) 
<br />
            { 
<br />
               
EDMAttributesSubAspect edmAttributesAspect = (EDMAttributesSubAspect)aspect; 
<br />
                <span style="COLOR: blue">return</span> <span style="COLOR: blue">new</span> PocoEDMAttributesWeaver(edmAttributesAspect.EDMContainerName); 
<br />
            } 
<br /><br />
            <span style="COLOR: blue">return</span> <span style="COLOR: blue">null</span>; 
<br />
        } 
<br /><br />
        <span style="COLOR: blue">#endregion</span><br />
    }
</div><p>
Nothing special there. Using a factory allows you to supply different weavers for
different aspects. 
</p><p>
So, to recap: we attached a plugin that did not do much itself. We used the assemblyinfo
to tell PostSharp it should always use a certain task when compiling assemblies that
are referencing our attribute assembly. We used the psproj file to make PostSharp
search in the right spot and we used a psplugin file to tell map the task name to
an actual factory. 
<br />
The factory creates our weaver, and we will discuss that in the next post!
</p></li>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=f4298397-a4fc-454f-94b5-ba8d238a30d1" />
      </body>
      <title>Postcompiling for Entity Framework: Part V</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,f4298397-a4fc-454f-94b5-ba8d238a30d1.aspx</guid>
      <link>http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartV.aspx</link>
      <pubDate>Fri, 22 Feb 2008 09:41:17 GMT</pubDate>
      <description>&lt;p&gt;
This is the fifth of a series about how to go about using postcompilation in your
solutions. You can read it as a tutorial on how to use PostSharp. I am very much new
to that framework, but the power it provides could seriously change how you build
your applications. While working on the EF contrib project, I had to dive into PostSharp,
and I hope to share some of the things I learned along the way.
&lt;/p&gt;
&lt;p&gt;
This post introduces the weaver, that will do exciting stuff for us.
&lt;/p&gt;
&lt;p&gt;
The full table of contents:
&lt;/p&gt;
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/IntroducingEntityFrameworkContribEasyIPocoImplementationV01.aspx"&gt;Introducing
Entity Framework Contrib- Easy IPoco implementation V 0.1&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartII.aspx"&gt;Part
II, Postsharp Core versus Postsharp Laos&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIII.aspx"&gt;Part
III, the compound aspect&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIV.aspx" target=_blank&gt;Part
IV, the PocoInterfaceSubaspect (composition aspect)&lt;/a&gt; 
&lt;li&gt;
Part V, hooking up the weaver 
&lt;li&gt;
Part VI, the EdmScalarWeaver 
&lt;h5&gt;Recap
&lt;/h5&gt;
&lt;p&gt;
We wish to create an attribute that can be placed on top of our ordinary Poco class,
that will magically transform it into a class that implements the 3 IPoco interfaces.
These are needed by the Entity Framework to do it's work. We will use &lt;a href="http://www.postsharp.org"&gt;PostSharp&lt;/a&gt; to
do this. 
&lt;br&gt;
Our previous post talked about the compound attribute and how it goes about implementing
interfaces on classes for you. 
&lt;/p&gt;
&lt;p&gt;
This post will look at how we are going to hook up a weaver to do more complex stuff,
not directly supported by the provided Laos aspects.
&lt;/p&gt;
&lt;p&gt;
But first I want to clear up a statement I made &lt;a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartII.aspx" target=_blank&gt;here&lt;/a&gt;:
'I found it wildly confusing the first time I came across the two parts of postsharp.
Laos is such a high-level abstraction, that you use it quite differently from Core.
In the latter, you have to spinup your own weaver, in Laos you do not ever see a weaver.
' 
&lt;br&gt;
It is not true that you do not ever see a weaver when using Laos. I should have been
more clear: Laos offers a great deal of functionality that you can use without going
into a weaver. 
&lt;/p&gt;
&lt;p&gt;
We want to put custom attributes on our type that EF needs (the EDM scalar attributes
on top of properties and the EDM type attribute that connects your type to a EDM type).
Laos does not seem to have a ready-to-use aspect that provides that functionality,
so we are going to need to hook into the weaver ourselves! How exciting! 
&lt;br&gt;
Thankfully, we can derive from TypeLevelAspectWeaver to make life easy enough.
&lt;/p&gt;
&lt;h5&gt;Hooking up a weaver
&lt;/h5&gt;
&lt;p&gt;
The cool thing about using the weaver is, that you can put it in it's own assembly
and not have to reference it in the assemblies that you are postcompiling. That is
quite important, because the weaver depends on PostSharp.Core and there is another
license attached to it. 
&lt;br&gt;
The PocoAttribute adds an aspect to the collection, like it did for the other aspects:
&lt;/p&gt;
&lt;div style="FONT-FAMILY: courier new"&gt;&lt;span style="COLOR: teal"&gt;&amp;nbsp; 1&lt;/span&gt; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;void&lt;/span&gt; ProvideAspects(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; element,
LaosReflectionAspectCollection collection) 
&lt;br&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{ 
&lt;br&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
Get the target type.&lt;/span&gt; 
&lt;br&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Type targetType = (Type)element; 
&lt;br&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 5&lt;/span&gt; 
&lt;br&gt;
&lt;span style="COLOR: teal"&gt;&amp;nbsp; 6&lt;/span&gt; .... 
&lt;br&gt;
&lt;span style="COLOR: teal"&gt;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
inspect the complete class and add EDM scalar attributes to the properties&lt;/span&gt; 
&lt;br&gt;
&lt;span style="COLOR: teal"&gt;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
collection.AddAspect(targetType, &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; EDMAttributesSubAspect(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.EDMContainerName,
Name, NamespaceName, PathToConfigFile)); 
&lt;/div&gt;
&lt;div style="FONT-FAMILY: courier new"&gt;..... 
&lt;br&gt;
&lt;span style="COLOR: teal"&gt;12&lt;/span&gt; }
&lt;/div&gt;
&lt;p&gt;
At line 11, the EDMAttributesSubAspect is added. This means that when Laos is ready
to start working, it will check that aspect to see what it should do. Let's look at
it now:
&lt;/p&gt;
&lt;div style="FONT-FAMILY: courier new"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Serializable] 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;class&lt;/span&gt; EDMAttributesSubAspect
: ILaosTypeLevelAspect 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#region&lt;/span&gt; fields
and properties 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; EDMContainerName
{ &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; } 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; TypeName
{ &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; } 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; NamespaceName
{ &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; } 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; PathToConfigFile
{ &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; } 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#endregion&lt;/span&gt; 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#region&lt;/span&gt; ctor 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// ctor&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// &amp;lt;param
name="EDMContainerName"&amp;gt;the container name&amp;lt;/param&amp;gt;&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// &amp;lt;param
name="NamespaceName"&amp;gt;namespacename, can be null&amp;lt;/param&amp;gt;&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// &amp;lt;param
name="TypeName"&amp;gt;typename, can be null&amp;lt;/param&amp;gt;&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; EDMAttributesSubAspect(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; EDMContainerName, &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; TypeName, &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; NamespaceName, &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; PathToConfigFile) 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.EDMContainerName
= EDMContainerName; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.TypeName
= TypeName; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.NamespaceName
= NamespaceName; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.PathToConfigFile
= PathToConfigFile; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#endregion&lt;/span&gt; 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#region&lt;/span&gt; ILaosTypeLevelAspect
Members 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;void&lt;/span&gt; CompileTimeInitialize(Type
type) 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; CompileTimeValidate(Type
type) 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: maroon"&gt;true&lt;/span&gt;; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;void&lt;/span&gt; RuntimeInitialize(Type
type) 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#endregion&lt;/span&gt; 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#region&lt;/span&gt; ILaosWeavableAspect
Members 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; AspectPriority 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt;.MinValue;
} 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#endregion&lt;/span&gt;&amp;nbsp; 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/div&gt;
&lt;p&gt;
You might be surprised to hear that this is the complete aspect!! Nothing that hints
at what is to come. 
&lt;/p&gt;
&lt;p&gt;
When such a thing happens, you might be stumped. But obviously you will immediately
think to check the assemblyinfo file of the PostSharp4EF assembly:
&lt;/p&gt;
&lt;div style="FONT-FAMILY: courier new"&gt;[assembly: PostSharp.Extensibility.ReferencingAssembliesRequirePostSharp(&lt;span style="COLOR: maroon"&gt;"PocoTypeWeaver"&lt;/span&gt;, &lt;span style="COLOR: maroon"&gt;"EntityFrameworkContrib.PostSharp4EF.Weaver"&lt;/span&gt;)] 
&lt;br&gt;
[assembly: InternalsVisibleTo(&lt;span style="COLOR: maroon"&gt;"EntityFrameworkContrib.PostSharp4EF.Weaver"&lt;/span&gt;)]
&lt;/div&gt;
&lt;p&gt;
Okay, I was kidding. You wouldn't have thought of that. ;-)
&lt;/p&gt;
&lt;p&gt;
The first statement there, instructs PostSharp to look for a plugin, with name PocoTypeWeaver
to process all assemblies that are referencing this assembly. It is just another way
of expressing requirements. I could have put that inside the attribute. But I did
not. 
&lt;/p&gt;
&lt;p&gt;
The plugin file can be found in the weaver assembly. It is just a normal text file
with naming convention that matches the entire assembly name + "psplugin". The contents
of that file:
&lt;/p&gt;
&lt;pre&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;xml&lt;/span&gt; &lt;span style="COLOR: red"&gt;version&lt;/span&gt;="&lt;span style="COLOR: blue"&gt;1.0&lt;/span&gt;" &lt;span style="COLOR: red"&gt;encoding&lt;/span&gt;="&lt;span style="COLOR: blue"&gt;utf-8&lt;/span&gt;" &lt;span style="COLOR: blue"&gt;?&amp;gt;&lt;/span&gt; &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;PlugIn&lt;/span&gt; &lt;span style="COLOR: red"&gt;xmlns&lt;/span&gt;="&lt;span style="COLOR: blue"&gt;http://schemas.postsharp.org/1.0/configuration&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt; &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;TaskType&lt;/span&gt; &lt;span style="COLOR: red"&gt;Name&lt;/span&gt;="&lt;span style="COLOR: blue"&gt;PocoTypeWeaver&lt;/span&gt;" &lt;span style="COLOR: red"&gt;Implementation&lt;/span&gt;="&lt;span style="COLOR: blue"&gt;EntityFrameworkContrib.PostSharp4EF.Weaver.PocoEDMAttributesWeaverFactory,
EntityFrameworkContrib.PostSharp4EF.Weaver&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt; &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="COLOR: maroon"&gt;TaskType&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt; &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="COLOR: maroon"&gt;PlugIn&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
Here you will see a task PocoTypeWeaver and a reference to an implementation of a
weaver factory. So, our PocoAttribute needs the pocoTypeWeaver and it can get one
through the use of a factory. But, since your client assembly will not have a reference
to this weaver assembly (which contains this mapping file), we need some way to tell
it where to look. Enter the psproj file that was put inside your client assembly:
&lt;/p&gt;
&lt;pre&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;Project&lt;/span&gt; &lt;span style="COLOR: red"&gt;xmlns&lt;/span&gt;="&lt;span style="COLOR: blue"&gt;http://schemas.postsharp.org/1.0/configuration&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt; &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;SearchPath&lt;/span&gt; &lt;span style="COLOR: red"&gt;Directory&lt;/span&gt;="&lt;span style="COLOR: blue"&gt;../EntityFrameworkContrib.PostSharp4EF.Weaver/bin/{$Configuration}&lt;/span&gt;"/&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt; &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;SearchPath&lt;/span&gt; &lt;span style="COLOR: red"&gt;Directory&lt;/span&gt;="&lt;span style="COLOR: blue"&gt;{$SearchPath}&lt;/span&gt;"
/&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt; &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;Tasks&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt; &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;AutoDetect&lt;/span&gt; /&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt; &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;Compile&lt;/span&gt; &lt;span style="COLOR: red"&gt;TargetFile&lt;/span&gt;="&lt;span style="COLOR: blue"&gt;{$Output}&lt;/span&gt;" &lt;span style="COLOR: red"&gt;IntermediateDirectory&lt;/span&gt;="&lt;span style="COLOR: blue"&gt;{$IntermediateDirectory}&lt;/span&gt;" &lt;span style="COLOR: red"&gt;CleanIntermediate&lt;/span&gt;="&lt;span style="COLOR: blue"&gt;false&lt;/span&gt;"
/&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt; &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="COLOR: maroon"&gt;Tasks&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt; &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="COLOR: maroon"&gt;Project&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
This psproj file is used by postsharp to extend it's searchpath. This means that on
machines that are building the solution, you will need to supply some path where PostSharp
can find the just mentioned psplugin file.
&lt;/p&gt;
&lt;p&gt;
Please note: there are other ways to configure the searchpath and possibly better
ways to setup a system like this. There is a default searchpath and you could also
put your plugin file there.
&lt;/p&gt;
&lt;h5&gt;The weaver factory
&lt;/h5&gt;
&lt;div style="FONT-FAMILY: courier new"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;class&lt;/span&gt; PocoEDMAttributesWeaverFactory
: Task, ILaosAspectWeaverFactory 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#region&lt;/span&gt; ILaosAspectWeaverFactory
Members 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// creates the
weaver&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// &amp;lt;param
name="aspect"&amp;gt;the EDMAttributesSubAspect that instantiated this factory&amp;lt;/param&amp;gt;&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// &amp;lt;returns&amp;gt;the
weaver that will do the lowlever hardcore work&amp;lt;/returns&amp;gt;&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; LaosAspectWeaver
CreateAspectWeaver(PostSharp.Laos.ILaosAspect aspect) 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (aspect &lt;span style="COLOR: blue"&gt;is&lt;/span&gt; EDMAttributesSubAspect) 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
EDMAttributesSubAspect edmAttributesAspect = (EDMAttributesSubAspect)aspect; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; PocoEDMAttributesWeaver(edmAttributesAspect.EDMContainerName); 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#endregion&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/div&gt;
&lt;p&gt;
Nothing special there. Using a factory allows you to supply different weavers for
different aspects. 
&lt;/p&gt;
&lt;p&gt;
So, to recap: we attached a plugin that did not do much itself. We used the assemblyinfo
to tell PostSharp it should always use a certain task when compiling assemblies that
are referencing our attribute assembly. We used the psproj file to make PostSharp
search in the right spot and we used a psplugin file to tell map the task name to
an actual factory. 
&lt;br&gt;
The factory creates our weaver, and we will discuss that in the next post!
&lt;/p&gt;
&lt;/li&gt;&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=f4298397-a4fc-454f-94b5-ba8d238a30d1" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,f4298397-a4fc-454f-94b5-ba8d238a30d1.aspx</comments>
      <category>EF-Contrib</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=9f1aea1e-bfcb-49b6-857b-d2aeb8fd7ae9</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,9f1aea1e-bfcb-49b6-857b-d2aeb8fd7ae9.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,9f1aea1e-bfcb-49b6-857b-d2aeb8fd7ae9.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9f1aea1e-bfcb-49b6-857b-d2aeb8fd7ae9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Just a short message to let everyone know I have built the first version of default
value support for efcontrib. 
</p>
        <p>
I will follow up with a bigger post on the limitations. For now, only ints and strings
will be processed.
</p>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=9f1aea1e-bfcb-49b6-857b-d2aeb8fd7ae9" />
      </body>
      <title>Default values for efcontrib</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,9f1aea1e-bfcb-49b6-857b-d2aeb8fd7ae9.aspx</guid>
      <link>http://www.sitechno.com/Blog/DefaultValuesForEfcontrib.aspx</link>
      <pubDate>Thu, 21 Feb 2008 15:44:26 GMT</pubDate>
      <description>&lt;p&gt;
Just a short message to let everyone know I have built the first version of default
value support for efcontrib. 
&lt;/p&gt;
&lt;p&gt;
I will follow up with a bigger post on the limitations. For now, only ints and strings
will be processed.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=9f1aea1e-bfcb-49b6-857b-d2aeb8fd7ae9" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,9f1aea1e-bfcb-49b6-857b-d2aeb8fd7ae9.aspx</comments>
      <category>EF-Contrib</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=1e9fde51-c2cb-41d5-8685-f939650fcdc4</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,1e9fde51-c2cb-41d5-8685-f939650fcdc4.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,1e9fde51-c2cb-41d5-8685-f939650fcdc4.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1e9fde51-c2cb-41d5-8685-f939650fcdc4</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is the fourth of a series about how to go about using postcompilation in your
solutions. You can read it as a tutorial on how to use PostSharp. I am very much new
to that framework, but the power it provides could seriously change how you build
your applications. While working on the EF contrib project, I had to dive into PostSharp,
and I hope to share some of the things I learned along the way.
</p>
        <p>
This post introduces the first real step I took: the compound aspect.
</p>
        <p>
The full table of contents:
</p>
        <li>
          <a href="http://www.sitechno.com/Blog/IntroducingEntityFrameworkContribEasyIPocoImplementationV01.aspx">
            <strong>
              <font color="#696969">Introducing
Entity Framework Contrib- Easy IPoco implementation V 0.1</font>
            </strong>
          </a>
        </li>
        <li>
          <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartII.aspx">
            <strong>
              <font color="#696969">Part
II, Postsharp Core versus Postsharp Laos</font>
            </strong>
          </a>
        </li>
        <li>
          <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIII.aspx">
            <strong>
              <font color="#696969">Part
III, the compound aspect</font>
            </strong>
          </a>
        </li>
        <li>
          <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIV.aspx" target="_blank">
            <strong>
              <font color="#696969">Part
IV, the PocoInterfaceSubaspect (composition aspect)</font>
            </strong>
          </a>
        </li>
        <li>
Part V, hooking up the weaver 
</li>
        <li>
Part VI, the EdmScalarWeaver 
</li>
        <h5>Recap
</h5>
        <p>
We wish to create an attribute that can be placed on top of our ordinary Poco class,
that will magically transform it into a class that implements the 3 IPoco interfaces.
These are needed by the Entity Framework to do it's work. We will use <a href="http://www.postsharp.org">PostSharp</a> to
do this. 
<br />
Our previous post talked about the composite attribute and how it allows you to combine
multiple actions into one attribute. That's easier to use for the endusers.
</p>
        <p>
This post we will look into the PocoInterfaceSubAspect and how it does it's job.
</p>
        <h5>The Composition aspect
</h5>
        <p>
You can remember placing the PocoInterfaceSubAspect on the element like so:
</p>
        <p style="FONT-FAMILY: courier new">
            <span style="COLOR: green">//
implement the three IPOCO interfaces on the class</span><br />
            collection.AddAspect(targetType, <span style="COLOR: blue">new</span> PocoInterfacesSubAspect());
</p>
        <p>
Postsharp will instantiate our aspect during it's weaving. Our aspect inherits from
CompositionAspect. Let's take a step back and discuss what the CompositionAspect does.
</p>
        <p>
The compositionAspect is an extremely powerful aspect which allows you to implement
an interface onto another object. So let's say you want to make an object be an iList
at runtime, without dealing with it in your source: use composition to implement iList!
</p>
        <p>
We are implementing the three iPoco interfaces. Because the CompositionAspect wants
one type to composite (and I did not feel like doing it three times) I created a facade
interface:
</p>
        <p>
    <span style="COLOR: blue">public</span> <span style="COLOR: blue">interface</span> IPocoFacade
: IEntityWithChangeTracker, IEntityWithKey, IEntityWithRelationships 
<br />
    { 
<br />
    }
</p>
        <p>
Now, how does the weaver go about using this aspect to actually implement the code
needed? It will ask for the public interface to inject and then also ask for an implementation
object. The implementation object is the one that gets to do the dirty work. PostSharp
will basically inject that implementation object into your object and then create
all your interface code to just use that implementation object.
</p>
        <h5>The PocoInterfacesSubAspect
</h5>
        <p>
The complete aspect looks like this:
</p>
        <p style="FONT-FAMILY: courier new">
    [Serializable] 
<br />
    <span style="COLOR: blue">sealed</span> <span style="COLOR: blue">class</span> PocoInterfacesSubAspect
: CompositionAspect 
<br />
    { 
<br /><br />
        <span style="COLOR: blue">public</span> <span style="COLOR: blue">override</span> <span style="COLOR: blue">object</span> CreateImplementationObject(InstanceBoundLaosEventArgs
eventArgs) 
<br />
        { 
<br />
            <span style="COLOR: blue">return</span> <span style="COLOR: blue">new</span> PocoImplementation(eventArgs.Instance); 
<br />
        } 
<br /><br />
        <span style="COLOR: blue">public</span> <span style="COLOR: blue">override</span> Type
GetPublicInterface(Type containerType) 
<br />
        { 
<br />
            <span style="COLOR: blue">return</span> <span style="COLOR: blue">typeof</span>(IPocoFacade); 
<br />
        } 
<br /><br />
        <span style="COLOR: gray">/// &lt;summary&gt;</span><br />
        <span style="COLOR: gray">/// Gets weaving
options.</span><br />
        <span style="COLOR: gray">/// &lt;/summary&gt;</span><br />
        <span style="COLOR: gray">/// &lt;returns&gt;Weaving
options specifying that the implementation accessor interface (&lt;see cref="IComposed{T}"/&gt;)</span><br />
        <span style="COLOR: gray">/// should be
exposed, and that the implementation of interfaces should be silently ignored if they
are</span><br />
        <span style="COLOR: gray">/// already implemented
in the parent types.&lt;/returns&gt;</span><br />
        <span style="COLOR: blue">public</span> <span style="COLOR: blue">override</span> CompositionAspectOptions
GetOptions() 
<br />
        { 
<br />
            <span style="COLOR: blue">return</span><br />
               
CompositionAspectOptions.GenerateImplementationAccessor | 
<br />
               
CompositionAspectOptions.IgnoreIfAlreadyImplemented; 
<br />
        } 
<br />
    }
</p>
        <p style="FONT-FAMILY: courier new">
 
</p>
        <p>
Clearly, we are more interested in the implementation object.
</p>
        <h5>The implementation
</h5>
        <p>
Part of the implemenation object looks like this:
</p>
        <p style="FONT-FAMILY: courier new">
   <span style="COLOR: blue">class</span> PocoImplementation : IPocoFacade 
<br />
    { 
<br />
        <span style="COLOR: blue">private</span> <span style="COLOR: blue">readonly</span> <span style="COLOR: blue">object</span> instance; 
<br /><br />
        <span style="COLOR: blue">public</span> PocoImplementation(<span style="COLOR: blue">object</span> instance) 
<br />
        { 
<br />
            <span style="COLOR: blue">this</span>.instance
= instance; 
<br />
        } 
<br />
}
</p>
        <p>
You can see it implements the IPocoFacade interface. It expects our businessobject
that was decorated with the Poco attribute in it's constructor.
</p>
        <p>
We now just look at the code the Ado.Net team has given us to see how to implement
these interfaces.
</p>
        <p>
The IEntityWithKey for instance, is quite easy:
</p>
        <p style="FONT-FAMILY: courier new">
        <span style="COLOR: blue">#region</span> key 
<br />
        EntityKey _entityKey = <span style="COLOR: blue">null</span>; 
<br /><br />
        <span style="COLOR: green">// Define the
EntityKey property for the class.</span><br />
        EntityKey IEntityWithKey.EntityKey 
<br />
        { 
<br />
            <span style="COLOR: blue">get</span><br />
            { 
<br />
                <span style="COLOR: blue">return</span> _entityKey; 
<br />
            } 
<br />
            <span style="COLOR: blue">set</span><br />
            { 
<br />
                <span style="COLOR: green">//
Set the EntityKey property, if it is not set.</span><br />
                <span style="COLOR: green">//
Report the change if the change tracker exists.</span><br />
                <span style="COLOR: blue">if</span> (_changeTracker
!= <span style="COLOR: blue">null</span>) 
<br />
               
{ 
<br />
                   
_changeTracker.EntityMemberChanging(<span style="COLOR: maroon">"-EntityKey-"</span>); 
<br />
                   
_entityKey = value; 
<br />
                   
_changeTracker.EntityMemberChanged(<span style="COLOR: maroon">"-EntityKey-"</span>); 
<br />
               
} 
<br />
                <span style="COLOR: blue">else</span><br />
               
{ 
<br />
                   
_entityKey = value; 
<br />
               
} 
<br />
            } 
<br />
        } 
<br />
        <span style="COLOR: blue">#endregion</span></p>
        <p>
Done.
</p>
        <p>
Since I first want to know if there is interest, I have not implemented relationships
and complex types yet. 
</p>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=1e9fde51-c2cb-41d5-8685-f939650fcdc4" />
      </body>
      <title>Postcompiling for Entity Framework: Part IV</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,1e9fde51-c2cb-41d5-8685-f939650fcdc4.aspx</guid>
      <link>http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIV.aspx</link>
      <pubDate>Thu, 21 Feb 2008 11:25:32 GMT</pubDate>
      <description>&lt;p&gt;
This is the fourth of a series about how to go about using postcompilation in your
solutions. You can read it as a tutorial on how to use PostSharp. I am very much new
to that framework, but the power it provides could seriously change how you build
your applications. While working on the EF contrib project, I had to dive into PostSharp,
and I hope to share some of the things I learned along the way.
&lt;/p&gt;
&lt;p&gt;
This post introduces the first real step I took: the compound aspect.
&lt;/p&gt;
&lt;p&gt;
The full table of contents:
&lt;/p&gt;
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/IntroducingEntityFrameworkContribEasyIPocoImplementationV01.aspx"&gt;&lt;strong&gt;&lt;font color=#696969&gt;Introducing
Entity Framework Contrib- Easy IPoco implementation V 0.1&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartII.aspx"&gt;&lt;strong&gt;&lt;font color=#696969&gt;Part
II, Postsharp Core versus Postsharp Laos&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIII.aspx"&gt;&lt;strong&gt;&lt;font color=#696969&gt;Part
III, the compound aspect&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIV.aspx" target=_blank&gt;&lt;strong&gt;&lt;font color=#696969&gt;Part
IV, the PocoInterfaceSubaspect (composition aspect)&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; 
&lt;li&gt;
Part V, hooking up the weaver 
&lt;li&gt;
Part VI, the EdmScalarWeaver 
&lt;/li&gt;
&lt;h5&gt;Recap
&lt;/h5&gt;
&lt;p&gt;
We wish to create an attribute that can be placed on top of our ordinary Poco class,
that will magically transform it into a class that implements the 3 IPoco interfaces.
These are needed by the Entity Framework to do it's work. We will use &lt;a href="http://www.postsharp.org"&gt;PostSharp&lt;/a&gt; to
do this. 
&lt;br&gt;
Our previous post talked about the composite attribute and how it allows you to combine
multiple actions into one attribute. That's easier to use for the endusers.
&lt;/p&gt;
&lt;p&gt;
This post we will look into the PocoInterfaceSubAspect and how it does it's job.
&lt;/p&gt;
&lt;h5&gt;The Composition aspect
&lt;/h5&gt;
&lt;p&gt;
You can remember placing the PocoInterfaceSubAspect on the element like so:
&lt;/p&gt;
&lt;p style="FONT-FAMILY: courier new"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
implement the three IPOCO interfaces on the class&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; collection.AddAspect(targetType, &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; PocoInterfacesSubAspect());
&lt;/p&gt;
&lt;p&gt;
Postsharp will instantiate our aspect during it's weaving. Our aspect inherits from
CompositionAspect. Let's take a step back and discuss what the CompositionAspect does.
&lt;/p&gt;
&lt;p&gt;
The compositionAspect is an extremely powerful aspect which allows you to implement
an interface onto another object. So let's say you want to make an object be an iList
at runtime, without dealing with it in your source: use composition to implement iList!
&lt;/p&gt;
&lt;p&gt;
We are implementing the three iPoco interfaces. Because the CompositionAspect wants
one type to composite (and I did not feel like doing it three times) I created a facade
interface:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;interface&lt;/span&gt; IPocoFacade
: IEntityWithChangeTracker, IEntityWithKey, IEntityWithRelationships 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p&gt;
Now, how does the weaver go about using this aspect to actually implement the code
needed? It will ask for the public interface to inject and then also ask for an implementation
object. The implementation object is the one that gets to do the dirty work. PostSharp
will basically inject that implementation object into your object and then create
all your interface code to just use that implementation object.
&lt;/p&gt;
&lt;h5&gt;The PocoInterfacesSubAspect
&lt;/h5&gt;
&lt;p&gt;
The complete aspect looks like this:
&lt;/p&gt;
&lt;p style="FONT-FAMILY: courier new"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [Serializable] 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;sealed&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;class&lt;/span&gt; PocoInterfacesSubAspect
: CompositionAspect 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; CreateImplementationObject(InstanceBoundLaosEventArgs
eventArgs) 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; PocoImplementation(eventArgs.Instance); 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;override&lt;/span&gt; Type
GetPublicInterface(Type containerType) 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(IPocoFacade); 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// Gets weaving
options.&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// &amp;lt;returns&amp;gt;Weaving
options specifying that the implementation accessor interface (&amp;lt;see cref="IComposed{T}"/&amp;gt;)&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// should be
exposed, and that the implementation of interfaces should be silently ignored if they
are&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: gray"&gt;/// already implemented
in the parent types.&amp;lt;/returns&amp;gt;&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;override&lt;/span&gt; CompositionAspectOptions
GetOptions() 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
CompositionAspectOptions.GenerateImplementationAccessor | 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
CompositionAspectOptions.IgnoreIfAlreadyImplemented; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="FONT-FAMILY: courier new"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Clearly, we are more interested in the implementation object.
&lt;/p&gt;
&lt;h5&gt;The implementation
&lt;/h5&gt;
&lt;p&gt;
Part of the implemenation object looks like this:
&lt;/p&gt;
&lt;p style="FONT-FAMILY: courier new"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; PocoImplementation : IPocoFacade 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;readonly&lt;/span&gt;&amp;nbsp;&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; instance; 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; PocoImplementation(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; instance) 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.instance
= instance; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;br&gt;
}
&lt;/p&gt;
&lt;p&gt;
You can see it implements the IPocoFacade interface. It expects our businessobject
that was decorated with the Poco attribute in it's constructor.
&lt;/p&gt;
&lt;p&gt;
We now just look at the code the Ado.Net team has given us to see how to implement
these interfaces.
&lt;/p&gt;
&lt;p&gt;
The IEntityWithKey for instance, is quite easy:
&lt;/p&gt;
&lt;p style="FONT-FAMILY: courier new"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#region&lt;/span&gt; key 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EntityKey _entityKey = &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;; 
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;// Define the
EntityKey property for the class.&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EntityKey IEntityWithKey.EntityKey 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _entityKey; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
Set the EntityKey property, if it is not set.&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: green"&gt;//
Report the change if the change tracker exists.&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (_changeTracker
!= &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;) 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{ 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_changeTracker.EntityMemberChanging(&lt;span style="COLOR: maroon"&gt;"-EntityKey-"&lt;/span&gt;); 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_entityKey = value; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_changeTracker.EntityMemberChanged(&lt;span style="COLOR: maroon"&gt;"-EntityKey-"&lt;/span&gt;); 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
} 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;else&lt;/span&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{ 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
_entityKey = value; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
} 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;#endregion&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Done.
&lt;/p&gt;
&lt;p&gt;
Since I first want to know if there is interest, I have not implemented relationships
and complex types yet. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=1e9fde51-c2cb-41d5-8685-f939650fcdc4" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,1e9fde51-c2cb-41d5-8685-f939650fcdc4.aspx</comments>
      <category>EF (Entity Framework);EF-Contrib</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=65cefefa-c055-4780-950e-fdfa7a022e25</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,65cefefa-c055-4780-950e-fdfa7a022e25.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,65cefefa-c055-4780-950e-fdfa7a022e25.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=65cefefa-c055-4780-950e-fdfa7a022e25</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is the second of a series about how to go about using postcompilation in your
solutions. You can read it as a tutorial on how to use PostSharp. I am very much a
new to that framework, but the power it provides could seriously change how you build
your applications. While working on the EF contrib project, I had to dive into PostSharp,
and I hope to share some of the things I learned along the way.
</p>
        <p>
This post introduces the first real step I took: the compound aspect.
</p>
        <p>
The full table of contents:
</p>
        <li>
          <a href="http://www.sitechno.com/Blog/IntroducingEntityFrameworkContribEasyIPocoImplementationV01.aspx">Introducing
Entity Framework Contrib- Easy IPoco implementation V 0.1</a>
        </li>
        <li>
          <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartII.aspx" target="_blank">Part
II, Postsharp Core versus Postsharp Laos</a>
        </li>
        <li>
Part III, the compound aspect 
</li>
        <li>
Part IV, the PocoInterfaceSubaspect 
</li>
        <li>
Part V, hooking up the weaver 
</li>
        <li>
Part VI, the EdmScalarWeaver</li>
        <h5>Recap
</h5>
        <p>
We wish to create an attribute that can be placed on top of our ordinary Poco class,
that will magically transform it into a class that implements the 3 IPoco interfaces.
These are needed by the Entity Framework to do it's work. We will use <a href="http://www.postsharp.org" target="_blank">PostSharp</a> to
do this. 
<br />
Post 1 introduced the project and post 2 introduced PostSharp.
</p>
        <h5>The Compound aspect
</h5>
        <p>
I have created an attribute class that can be placed on top of other classes, like
so:
</p>
        <div style="font-family: courier new">    <span style="color: gray">///
&lt;summary&gt;</span><br />
    <span style="color: gray">/// &lt;para&gt;</span><br />
    <span style="color: gray">/// Attribute that can be used to decorate
normal POCO classes with. It is used to start off a post compilation phase</span><br />
    <span style="color: gray">/// that will modify the IL of the class.
After this phase, the class will implement:</span><br />
    <span style="color: gray">/// &lt;list type=""&gt;</span><br />
    <span style="color: gray">/// &lt;item&gt;INotifyPropertyChanged&lt;/item&gt;</span><br />
    <span style="color: gray">/// &lt;item&gt;IEntityWithChangeTracker&lt;/item&gt;</span><br />
    <span style="color: gray">/// &lt;item&gt;IEntityWithKey&lt;/item&gt;</span><br />
    <span style="color: gray">/// &lt;item&gt;IEntityWithRelationships&lt;/item&gt;</span><br />
    <span style="color: gray">/// &lt;/list&gt;</span><br />
    <span style="color: gray">/// &lt;/para&gt;</span><br />
    <span style="color: gray">/// &lt;para&gt;</span><br />
    <span style="color: gray">/// It will also place EDMScalarattributes
on your properties.</span><br />
    <span style="color: gray">/// &lt;/para&gt;</span><br />
    <span style="color: gray">/// &lt;para&gt;This results in a type
that is completely ready for consumption by the EntityFramework&lt;/para&gt;</span><br />
    <span style="color: gray">/// &lt;/summary&gt;</span><br />
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = <span style="color: maroon">false</span>,
Inherited = <span style="color: maroon">false</span>)] 
<br />
    [MulticastAttributeUsage(MulticastTargets.Class, AllowMultiple
= <span style="color: maroon">false</span>)] 
<br />
    <span style="color: blue">public</span> <span style="color: blue">sealed</span> <span style="color: blue">class</span> PocoAttribute
: CompoundAspect 
<br />
    { 
</div>
        <div style="font-family: courier new">... implementation 
<br />
    }
</div>
        <p>
As you can see it inherits from the compound aspect class, from the PostSharp.Laos
assembly.
</p>
        <p>
The compound aspect basically allows you to define other aspect<strong>s</strong> to
do the job for you. This is very nice when you want to do more things, but only want
to use one aspect. 
</p>
        <p>
By overriding the ProvideAspects method, we can add our other aspects:
</p>
        <div style="font-family: courier new">
          <span style="color: teal">  1</span>         <span style="color: blue">public</span> <span style="color: blue">override</span> <span style="color: blue">void</span> ProvideAspects(<span style="color: blue">object</span> element,
LaosReflectionAspectCollection collection) 
<br /><span style="color: teal">  2</span>        
{ 
<br /><span style="color: teal">  3</span>             <span style="color: green">//
Get the target type.</span><br /><span style="color: teal">  4</span>            
Type targetType = (Type)element; 
<br /><span style="color: teal">  5</span><br /><span style="color: teal">  6</span>             <span style="color: green">//
implement the INotifyPropertyChanged interface on the class</span><br /><span style="color: teal">  7</span>            
collection.AddAspect(targetType, <span style="color: blue">new</span> AddNotifyPropertyChangedInterfaceSubAspect()); 
<br /><span style="color: teal">  8</span>             <span style="color: green">//
implement the three IPOCO interfaces on the class</span><br /><span style="color: teal">  9</span>            
collection.AddAspect(targetType, <span style="color: blue">new</span> PocoInterfacesSubAspect()); 
<br /><span style="color: teal"> 10</span>             <span style="color: green">//
inspect the complete class and add EDM scalar attributes to the properties</span><br /><span style="color: teal"> 11</span>            
collection.AddAspect(targetType, <span style="color: blue">new</span> EDMAttributesSubAspect(<span style="color: blue">this</span>.EDMContainerName,
Name, NamespaceName, PathToConfigFile)); 
<br /><span style="color: teal"> 12</span><br /><span style="color: teal"> 13</span>             <span style="color: green">//
iterate the properties</span><br /><span style="color: teal"> 14</span>             <span style="color: blue">foreach</span> (PropertyInfo
property <span style="color: blue">in</span> targetType.UnderlyingSystemType.GetProperties()) 
<br /><span style="color: teal"> 15</span>            
{ 
<br /><span style="color: teal"> 16</span>                 <span style="color: blue">if</span> (property.DeclaringType
== targetType &amp;&amp; property.CanWrite) 
<br /><span style="color: teal"> 17</span>                
{ 
<br /><span style="color: teal"> 18</span>                    
MethodInfo method = property.GetSetMethod(); 
<br /><span style="color: teal"> 19</span><br /><span style="color: teal"> 20</span>                     <span style="color: blue">if</span> (!method.IsStatic) 
<br /><span style="color: teal"> 21</span>                    
{ 
<br /><span style="color: teal"> 22</span><br /><span style="color: teal"> 23</span>                         <span style="color: green">//
throw notifypropertychanged events</span><br /><span style="color: teal"> 24</span>                        
collection.AddAspect(method, <span style="color: blue">new</span> OnPropertySetNotifyPropertyChangedSubAspect(property.Name, <span style="color: blue">this</span>.AspectPriority)); 
<br /><span style="color: teal"> 25</span><br /><span style="color: teal"> 26</span>                         <span style="color: green">//
TODO: possibly refactor to only include edm properties</span><br /><span style="color: teal"> 27</span>                         <span style="color: green">//
call the changetracker</span><br /><span style="color: teal"> 28</span>                        
collection.AddAspect(method, <span style="color: blue">new</span> OnPropertySetChangeTrackSubAspect(property.Name, <span style="color: blue">this</span>.AspectPriority)); 
<br /><span style="color: teal"> 29</span>                    
} 
<br /><span style="color: teal"> 30</span>                
} 
<br /><span style="color: teal"> 31</span>            
} 
<br /><span style="color: teal"> 32</span>        
}
</div>
        <p>
As you can see, on line 4 I cast the element parameter to a type. That is the type
we have adorned with our attribute (your 'Person' Poco class, for instance). Then,
I specify that I want 3 other aspects to work on this type!
</p>
        <ul>
          <li>
The AddNotifyPropertyChangedInterfaceSubAspect, will implement the INotifyPropertyChangedInterface.
(note: this aspect is added just for simplicity, it has nothing to do with IPoco,
so I might remove it).</li>
          <li>
The PocoInterfaceSubAspect, will implement the 3 interfaces (see following post)</li>
          <li>
The EDMAttributesSubAspect, will put EDMScalar attributes on top of our properties,
needed by EF to do it's job</li>
        </ul>
        <p>
After that, I loop through the properties in our targetType and add aspects to their
setters. These will inject methods into the setters to throw the PropertyChanged event
and let the EF changetracker know that the property was changed.
</p>
        <p>
That's all the work this compound aspect does. It just provides aspects to the correct
codeblocks. The real work is done inside of these aspects and will be explained in
following posts.
</p>
        <img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=65cefefa-c055-4780-950e-fdfa7a022e25" />
      </body>
      <title>Postcompiling for Entity Framework: Part III</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,65cefefa-c055-4780-950e-fdfa7a022e25.aspx</guid>
      <link>http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIII.aspx</link>
      <pubDate>Wed, 20 Feb 2008 12:34:36 GMT</pubDate>
      <description>&lt;p&gt;
This is the second of a series about how to go about using postcompilation in your
solutions. You can read it as a tutorial on how to use PostSharp. I am very much a
new to that framework, but the power it provides could seriously change how you build
your applications. While working on the EF contrib project, I had to dive into PostSharp,
and I hope to share some of the things I learned along the way.
&lt;/p&gt;
&lt;p&gt;
This post introduces the first real step I took: the compound aspect.
&lt;/p&gt;
&lt;p&gt;
The full table of contents:
&lt;/p&gt;
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/IntroducingEntityFrameworkContribEasyIPocoImplementationV01.aspx"&gt;Introducing
Entity Framework Contrib- Easy IPoco implementation V 0.1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartII.aspx" target="_blank"&gt;Part
II, Postsharp Core versus Postsharp Laos&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
Part III, the compound aspect 
&lt;/li&gt;
&lt;li&gt;
Part IV, the PocoInterfaceSubaspect 
&lt;/li&gt;
&lt;li&gt;
Part V, hooking up the weaver 
&lt;/li&gt;
&lt;li&gt;
Part VI, the EdmScalarWeaver&lt;/li&gt;
&lt;h5&gt;Recap
&lt;/h5&gt;
&lt;p&gt;
We wish to create an attribute that can be placed on top of our ordinary Poco class,
that will magically transform it into a class that implements the 3 IPoco interfaces.
These are needed by the Entity Framework to do it's work. We will use &lt;a href="http://www.postsharp.org" target="_blank"&gt;PostSharp&lt;/a&gt; to
do this. 
&lt;br /&gt;
Post 1 introduced the project and post 2 introduced PostSharp.
&lt;/p&gt;
&lt;h5&gt;The Compound aspect
&lt;/h5&gt;
&lt;p&gt;
I have created an attribute class that can be placed on top of other classes, like
so:
&lt;/p&gt;
&lt;div style="font-family: courier new"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// &amp;lt;para&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// Attribute that can be used to decorate
normal POCO classes with. It is used to start off a post compilation phase&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// that will modify the IL of the class.
After this phase, the class will implement:&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// &amp;lt;list type=&amp;quot;&amp;quot;&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// &amp;lt;item&amp;gt;INotifyPropertyChanged&amp;lt;/item&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// &amp;lt;item&amp;gt;IEntityWithChangeTracker&amp;lt;/item&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// &amp;lt;item&amp;gt;IEntityWithKey&amp;lt;/item&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// &amp;lt;item&amp;gt;IEntityWithRelationships&amp;lt;/item&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// &amp;lt;/list&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// &amp;lt;/para&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// &amp;lt;para&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// It will also place EDMScalarattributes
on your properties.&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// &amp;lt;/para&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// &amp;lt;para&amp;gt;This results in a type
that is completely ready for consumption by the EntityFramework&amp;lt;/para&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; [AttributeUsage(AttributeTargets.Class, AllowMultiple = &lt;span style="color: maroon"&gt;false&lt;/span&gt;,
Inherited = &lt;span style="color: maroon"&gt;false&lt;/span&gt;)] 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; [MulticastAttributeUsage(MulticastTargets.Class, AllowMultiple
= &lt;span style="color: maroon"&gt;false&lt;/span&gt;)] 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;sealed&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt; PocoAttribute
: CompoundAspect 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; { 
&lt;/div&gt;
&lt;div style="font-family: courier new"&gt;... implementation 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; }
&lt;/div&gt;
&lt;p&gt;
As you can see it inherits from the compound aspect class, from the PostSharp.Laos
assembly.
&lt;/p&gt;
&lt;p&gt;
The compound aspect basically allows you to define other aspect&lt;strong&gt;s&lt;/strong&gt; to
do the job for you. This is very nice when you want to do more things, but only want
to use one aspect. 
&lt;/p&gt;
&lt;p&gt;
By overriding the ProvideAspects method, we can add our other aspects:
&lt;/p&gt;
&lt;div style="font-family: courier new"&gt;&lt;span style="color: teal"&gt;&amp;#160; 1&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;override&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; ProvideAspects(&lt;span style="color: blue"&gt;object&lt;/span&gt; element,
LaosReflectionAspectCollection collection) 
&lt;br /&gt;
&lt;span style="color: teal"&gt;&amp;#160; 2&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
{ 
&lt;br /&gt;
&lt;span style="color: teal"&gt;&amp;#160; 3&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//
Get the target type.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: teal"&gt;&amp;#160; 4&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
Type targetType = (Type)element; 
&lt;br /&gt;
&lt;span style="color: teal"&gt;&amp;#160; 5&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: teal"&gt;&amp;#160; 6&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//
implement the INotifyPropertyChanged interface on the class&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: teal"&gt;&amp;#160; 7&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
collection.AddAspect(targetType, &lt;span style="color: blue"&gt;new&lt;/span&gt; AddNotifyPropertyChangedInterfaceSubAspect()); 
&lt;br /&gt;
&lt;span style="color: teal"&gt;&amp;#160; 8&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//
implement the three IPOCO interfaces on the class&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: teal"&gt;&amp;#160; 9&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
collection.AddAspect(targetType, &lt;span style="color: blue"&gt;new&lt;/span&gt; PocoInterfacesSubAspect()); 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 10&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//
inspect the complete class and add EDM scalar attributes to the properties&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 11&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
collection.AddAspect(targetType, &lt;span style="color: blue"&gt;new&lt;/span&gt; EDMAttributesSubAspect(&lt;span style="color: blue"&gt;this&lt;/span&gt;.EDMContainerName,
Name, NamespaceName, PathToConfigFile)); 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 12&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 13&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//
iterate the properties&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 14&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;foreach&lt;/span&gt; (PropertyInfo
property &lt;span style="color: blue"&gt;in&lt;/span&gt; targetType.UnderlyingSystemType.GetProperties()) 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 15&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
{ 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 16&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (property.DeclaringType
== targetType &amp;amp;&amp;amp; property.CanWrite) 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 17&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
{ 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 18&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
MethodInfo method = property.GetSetMethod(); 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 19&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 20&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (!method.IsStatic) 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 21&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
{ 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 22&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 23&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//
throw notifypropertychanged events&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 24&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
collection.AddAspect(method, &lt;span style="color: blue"&gt;new&lt;/span&gt; OnPropertySetNotifyPropertyChangedSubAspect(property.Name, &lt;span style="color: blue"&gt;this&lt;/span&gt;.AspectPriority)); 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 25&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 26&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//
TODO: possibly refactor to only include edm properties&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 27&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//
call the changetracker&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 28&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
collection.AddAspect(method, &lt;span style="color: blue"&gt;new&lt;/span&gt; OnPropertySetChangeTrackSubAspect(property.Name, &lt;span style="color: blue"&gt;this&lt;/span&gt;.AspectPriority)); 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 29&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
} 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 30&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
} 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 31&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
} 
&lt;br /&gt;
&lt;span style="color: teal"&gt; 32&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
}
&lt;/div&gt;
&lt;p&gt;
As you can see, on line 4 I cast the element parameter to a type. That is the type
we have adorned with our attribute (your 'Person' Poco class, for instance). Then,
I specify that I want 3 other aspects to work on this type!
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The AddNotifyPropertyChangedInterfaceSubAspect, will implement the INotifyPropertyChangedInterface.
(note: this aspect is added just for simplicity, it has nothing to do with IPoco,
so I might remove it).&lt;/li&gt;
&lt;li&gt;
The PocoInterfaceSubAspect, will implement the 3 interfaces (see following post)&lt;/li&gt;
&lt;li&gt;
The EDMAttributesSubAspect, will put EDMScalar attributes on top of our properties,
needed by EF to do it's job&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
After that, I loop through the properties in our targetType and add aspects to their
setters. These will inject methods into the setters to throw the PropertyChanged event
and let the EF changetracker know that the property was changed.
&lt;/p&gt;
&lt;p&gt;
That's all the work this compound aspect does. It just provides aspects to the correct
codeblocks. The real work is done inside of these aspects and will be explained in
following posts.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=65cefefa-c055-4780-950e-fdfa7a022e25" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,65cefefa-c055-4780-950e-fdfa7a022e25.aspx</comments>
      <category>EF-Contrib</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=aed44f98-16a6-4e4e-b360-efdbfbf925d1</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,aed44f98-16a6-4e4e-b360-efdbfbf925d1.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,aed44f98-16a6-4e4e-b360-efdbfbf925d1.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=aed44f98-16a6-4e4e-b360-efdbfbf925d1</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is the second of a series about how to go about using postcompilation in your
solutions. You can read it as a tutorial on how to use PostSharp. I am very much a
new to that framework, but the power it provides could seriously change how you build
your applications. While working on the EF contrib project, I had to dive into PostSharp,
and I hope to share some of the things I learned along the way.
</p>
        <p>
This post quickly introduces PostSharp, before we move on to the real stuff!
</p>
        <p>
The full table of contents:
</p>
        <ul>
          <li>
            <a title="Introducing Entity Framework Contrib- Easy IPoco implementation V 0.1" href="http://www.sitechno.com/Blog/IntroducingEntityFrameworkContribEasyIPocoImplementationV01.aspx">Introducing
Entity Framework Contrib- Easy IPoco implementation V 0.1</a>
          </li>
          <li>
Part II, Postsharp Core versus Postsharp Laos</li>
          <li>
Part III, the compound aspect</li>
          <li>
Part IV, the PocoInterfaceSubaspect</li>
          <li>
Part V, hooking up the weaver</li>
          <li>
Part VI, the EdmScalarWeaver</li>
        </ul>
        <h5>PostSharp
</h5>
        <p>
The PostSharp <a href="http://www.postsharp.org/" target="_blank">home</a> introduces
PostSharp as follows:
</p>
        <blockquote>
          <p>
PostSharp is a tool that can <strong>reduce the number of lines of code </strong>and <strong>improve
its logical decoupling</strong>. Therefore its helps you delivering higher stability,
cleaner design, and cheaper source code maintenance
</p>
          <p>
And best of all, PostSharp is <strong>free and open source</strong>. Yes, even for
commercial use
</p>
        </blockquote>
        <p>
Basically, it allows you to use attributes on top of code to indicate that <strong>after</strong> the
normal visual studio compilation, PostSharp should do 'something' to the code. That
'something' could be anything you want. The result is a compiled assembly that does
more than you would expect from the sourcecode. This is a good thing, when you have
'code noise': code that might be important, but distracts from the real work. 
</p>
        <p>
Code noise could be your logging mechanism, or your transaction mechanism. In my case,
I did not want to implement the IPoco interfaces that EntityFramework needs, in order
to make my business objects work with EntityFramework. I want my business objects
to represent a person, car or whatever, and not have to deal with the data access
logic at all.
</p>
        <p>
The simplest example you can think of, is shown on the frontpage:
</p>
        <div style="font-family: courier new">
          <span style="color: blue">public</span> <span style="color: blue">class</span> SimplestTraceAttribute
: OnMethodBoundaryAspect  
<br />
{  
<br />
  <span style="color: blue">public</span> <span style="color: blue">override</span> <span style="color: blue">void</span> OnEntry(
MethodExecutionEventArgs eventArgs)  
<br />
  {  
<br />
    Trace.TraceInformation(<span style="color: maroon">"Entering
{0}."</span>, eventArgs.Method);  
<br />
    Trace.Indent();  
<br />
  }  
<br />
  <span style="color: blue">public</span> <span style="color: blue">override</span> <span style="color: blue">void</span> OnExit(
MethodExecutionEventArgs eventArgs)  
<br />
  {  
<br />
    Trace.Unindent();  
<br />
    Trace.TraceInformation(<span style="color: maroon">"Leaving
{0}."</span>, eventArgs.Method);  
<br />
  }  
<br />
}
</div>
        <p>
By adding an [SimplestTrace] attribute on top of your code, you will have instant
tracing information, without actually seeing it in your code. The fun thing about
PostSharp is, that this code is actually in your assembly after post-compilation,
as opposed to other AOP frameworks, that will do it at runtime.
</p>
        <h5>Laos versus Core
</h5>
PostSharp offers a full representation of your code, a bit like reflection. But it
can be hard to work with. That is why PostSharp Laos was created. Laos is a 'plugin'
on the core functionality that abstracts away most of the hard stuff, and leaves you
with ready to implement aspects. 
<p>
I found it wildly confusing the first time I came across the two parts of postsharp.
Laos is such a high-level abstraction, that you use it quite differently from Core.
In the latter, you have to spinup your own weaver, in Laos you do not ever see a weaver. 
<br />
(A weaver is a class that will actually inject IL methods into your assembly.)
</p><p>
When you use Laos, some smart hooks exist to use it's own weaver. That weaver knows
how to deal with Laos Aspects. And so, you can use the Laos abstractions without any
knowledge about IL or weaving.
</p><p>
The shown example uses the OnMethodBoundaryAspect, from Laos. The Laos weaver will
inject the necessary IL methods on every method (that matches your desire to trace
it) to call the OnEntry and the OnExit methods you defined. There are quite a few
aspects ready to inherit from. I urge you to look at the documentation to find out
which.
</p><p>
If you were to implement that functionality using the Core library, you would have
to inject all the IL yourself. It would however, give you the opportunity to actually
inject the Trace calls into the methods, instead of the easier method calls.
</p><p>
One very interesting aspect that Laos offers, is the CompositionAspect, which allows
you to set a specific interface to implement and give an implementation object that
is called for every defined method on the interface. I use it for the three IPoco
interfaces.
</p><p>
In short: Laos is a very high-level abstraction that will get you very far. In some
cases you need to take it a little further, and you will need Core.
</p><p>
 
</p><p>
In the next couple of posts, I will show both the Laos aspects and the Core aspect,
how they were applied and how they do their job.
</p><img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=aed44f98-16a6-4e4e-b360-efdbfbf925d1" /></body>
      <title>Postcompiling for Entity Framework: Part II</title>
      <guid isPermaLink="false">http://www.sitechno.com/Blog/PermaLink,guid,aed44f98-16a6-4e4e-b360-efdbfbf925d1.aspx</guid>
      <link>http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartII.aspx</link>
      <pubDate>Tue, 19 Feb 2008 11:28:26 GMT</pubDate>
      <description>&lt;p&gt;
This is the second of a series about how to go about using postcompilation in your
solutions. You can read it as a tutorial on how to use PostSharp. I am very much a
new to that framework, but the power it provides could seriously change how you build
your applications. While working on the EF contrib project, I had to dive into PostSharp,
and I hope to share some of the things I learned along the way.
&lt;/p&gt;
&lt;p&gt;
This post quickly introduces PostSharp, before we move on to the real stuff!
&lt;/p&gt;
&lt;p&gt;
The full table of contents:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a title="Introducing Entity Framework Contrib- Easy IPoco implementation V 0.1" href="http://www.sitechno.com/Blog/IntroducingEntityFrameworkContribEasyIPocoImplementationV01.aspx"&gt;Introducing
Entity Framework Contrib- Easy IPoco implementation V 0.1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Part II, Postsharp Core versus Postsharp Laos&lt;/li&gt;
&lt;li&gt;
Part III, the compound aspect&lt;/li&gt;
&lt;li&gt;
Part IV, the PocoInterfaceSubaspect&lt;/li&gt;
&lt;li&gt;
Part V, hooking up the weaver&lt;/li&gt;
&lt;li&gt;
Part VI, the EdmScalarWeaver&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;PostSharp
&lt;/h5&gt;
&lt;p&gt;
The PostSharp &lt;a href="http://www.postsharp.org/" target="_blank"&gt;home&lt;/a&gt; introduces
PostSharp as follows:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
PostSharp is a tool that can &lt;strong&gt;reduce the number of lines of code &lt;/strong&gt;and &lt;strong&gt;improve
its logical decoupling&lt;/strong&gt;. Therefore its helps you delivering higher stability,
cleaner design, and cheaper source code maintenance
&lt;/p&gt;
&lt;p&gt;
And best of all, PostSharp is &lt;strong&gt;free and open source&lt;/strong&gt;. Yes, even for
commercial use
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Basically, it allows you to use attributes on top of code to indicate that &lt;strong&gt;after&lt;/strong&gt; the
normal visual studio compilation, PostSharp should do 'something' to the code. That
'something' could be anything you want. The result is a compiled assembly that does
more than you would expect from the sourcecode. This is a good thing, when you have
'code noise': code that might be important, but distracts from the real work. 
&lt;/p&gt;
&lt;p&gt;
Code noise could be your logging mechanism, or your transaction mechanism. In my case,
I did not want to implement the IPoco interfaces that EntityFramework needs, in order
to make my business objects work with EntityFramework. I want my business objects
to represent a person, car or whatever, and not have to deal with the data access
logic at all.
&lt;/p&gt;
&lt;p&gt;
The simplest example you can think of, is shown on the frontpage:
&lt;/p&gt;
&lt;div style="font-family: courier new"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt; SimplestTraceAttribute
: OnMethodBoundaryAspect&amp;#160; 
&lt;br /&gt;
{&amp;#160; 
&lt;br /&gt;
&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;override&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; OnEntry(
MethodExecutionEventArgs eventArgs)&amp;#160; 
&lt;br /&gt;
&amp;#160; {&amp;#160; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Trace.TraceInformation(&lt;span style="color: maroon"&gt;&amp;quot;Entering
{0}.&amp;quot;&lt;/span&gt;, eventArgs.Method);&amp;#160; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Trace.Indent();&amp;#160; 
&lt;br /&gt;
&amp;#160; }&amp;#160; 
&lt;br /&gt;
&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;override&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; OnExit(
MethodExecutionEventArgs eventArgs)&amp;#160; 
&lt;br /&gt;
&amp;#160; {&amp;#160; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Trace.Unindent();&amp;#160; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Trace.TraceInformation(&lt;span style="color: maroon"&gt;&amp;quot;Leaving
{0}.&amp;quot;&lt;/span&gt;, eventArgs.Method);&amp;#160; 
&lt;br /&gt;
&amp;#160; }&amp;#160; 
&lt;br /&gt;
}
&lt;/div&gt;
&lt;p&gt;
By adding an [SimplestTrace] attribute on top of your code, you will have instant
tracing information, without actually seeing it in your code. The fun thing about
PostSharp is, that this code is actually in your assembly after post-compilation,
as opposed to other AOP frameworks, that will do it at runtime.
&lt;/p&gt;
&lt;h5&gt;Laos versus Core
&lt;/h5&gt;
PostSharp offers a full representation of your code, a bit like reflection. But it
can be hard to work with. That is why PostSharp Laos was created. Laos is a 'plugin'
on the core functionality that abstracts away most of the hard stuff, and leaves you
with ready to implement aspects. 
&lt;p&gt;
I found it wildly confusing the first time I came across the two parts of postsharp.
Laos is such a high-level abstraction, that you use it quite differently from Core.
In the latter, you have to spinup your own weaver, in Laos you do not ever see a weaver. 
&lt;br /&gt;
(A weaver is a class that will actually inject IL methods into your assembly.)
&lt;/p&gt;
&lt;p&gt;
When you use Laos, some smart hooks exist to use it's own weaver. That weaver knows
how to deal with Laos Aspects. And so, you can use the Laos abstractions without any
knowledge about IL or weaving.
&lt;/p&gt;
&lt;p&gt;
The shown example uses the OnMethodBoundaryAspect, from Laos. The Laos weaver will
inject the necessary IL methods on every method (that matches your desire to trace
it) to call the OnEntry and the OnExit methods you defined. There are quite a few
aspects ready to inherit from. I urge you to look at the documentation to find out
which.
&lt;/p&gt;
&lt;p&gt;
If you were to implement that functionality using the Core library, you would have
to inject all the IL yourself. It would however, give you the opportunity to actually
inject the Trace calls into the methods, instead of the easier method calls.
&lt;/p&gt;
&lt;p&gt;
One very interesting aspect that Laos offers, is the CompositionAspect, which allows
you to set a specific interface to implement and give an implementation object that
is called for every defined method on the interface. I use it for the three IPoco
interfaces.
&lt;/p&gt;
&lt;p&gt;
In short: Laos is a very high-level abstraction that will get you very far. In some
cases you need to take it a little further, and you will need Core.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
In the next couple of posts, I will show both the Laos aspects and the Core aspect,
how they were applied and how they do their job.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sitechno.com/Blog/aggbug.ashx?id=aed44f98-16a6-4e4e-b360-efdbfbf925d1" /&gt;</description>
      <comments>http://www.sitechno.com/Blog/CommentView,guid,aed44f98-16a6-4e4e-b360-efdbfbf925d1.aspx</comments>
      <category>EF-Contrib</category>
    </item>
    <item>
      <trackback:ping>http://www.sitechno.com/Blog/Trackback.aspx?guid=7bf43ecd-9e5e-49c3-bd80-436b32259787</trackback:ping>
      <pingback:server>http://www.sitechno.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sitechno.com/Blog/PermaLink,guid,7bf43ecd-9e5e-49c3-bd80-436b32259787.aspx</pingback:target>
      <dc:creator>Ruurd Boeke</dc:creator>
      <wfw:comment>http://www.sitechno.com/Blog/CommentView,guid,7bf43ecd-9e5e-49c3-bd80-436b32259787.aspx</wfw:comment>
      <wfw:commentRss>http://www.sitechno.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7bf43ecd-9e5e-49c3-bd80-436b32259787</wfw:commentRss>
      <slash:comments>46</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In this post I'd like to introduce version 0.1 of the first Entity Framework contribution
project: Automatically implement the IPoco interfaces. 
<br />
The project is aimed at helping you build your domain layer in a more persistence
ignorant way, than is possible at this moment.
</p>
        <p>
[official codeplex location of the project is <a href="http://www.codeplex.com/efcontrib" target="_blank">here</a>]
</p>
        <p>
The full table of contents:
</p>
        <ul>
          <li>
            <a href="http://www.sitechno.com/Blog/IntroducingEntityFrameworkContribEasyIPocoImplementationV01.aspx">
              <strong>
                <font color="#696969">Introducing
Entity Framework Contrib- Easy IPoco implementation V 0.1</font>
              </strong>
            </a>
          </li>
          <li>
            <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartII.aspx">
              <strong>
                <font color="#696969">Part
II, Postsharp Core versus Postsharp Laos</font>
              </strong>
            </a>
          </li>
          <li>
            <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIII.aspx">
              <strong>
                <font color="#696969">Part
III, the compound aspect</font>
              </strong>
            </a>
          </li>
          <li>
            <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartIV.aspx" target="_blank">
              <strong>
                <font color="#696969">Part
IV, the PocoInterfaceSubaspect (composition aspect)</font>
              </strong>
            </a>
          </li>
          <li>
            <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartV.aspx">Part
V, hooking up the weaver</a>
          </li>
          <li>
            <a href="http://www.sitechno.com/Blog/PostcompilingForEntityFrameworkPartVI.aspx">Part
VI, the EdmScalarWeaver</a>
          </li>
        </ul>
        <h5>The Problem: baseclass needed
</h5>
        <p>
Microsoft is on the brink of releasing the <a href="http://go.microsoft.com/fwlink/?LinkId=104981" target="_blank">Entity
Framework</a>. It is at <a href="http://blogs.msdn.com/adonet/archive/2007/12/05/ado-net-entity-framework-beta-3-rleased.aspx" target="_blank">beta
3</a> at this moment. If you are reading this blog, you are probably familiar with
it, but let's do a quick summary: 
<br />
The Entity Framework is a framework that maps between a database and your domain objects.
It's grand vision is to easily allow you to (with a funky design-experience) create
(multiple) conceptual models that know how to talk to the database. Although more
than an OR-mapper, most people like to position it as such anyway. 
<br />
EF is an abstraction layer on top of your datastore and will allow you to work with
business objects that actually make sense from an object-oriented perspective, instead
of making you work with datarows, tables and sets.
</p>
        <p>
One part of the criticism that the Entity Framework gets at this moment, is the lack
of persistence ignorance. This means that, when you use the Entity Framework, you
will have to create business entities that are aware of the Entity Framework (they
need to derive from a Entity Framework baseclass). 
<br />
This goes against too many principles to mention, and the ADO.Net team have gotten
quite a bit of comments about it (other more mature frameworks, like <a href="http://www.nhibernate.org/" target="_blank">nHibernate</a> do
not force you into this). Rightfully so! 
<br />
In the end, Daniel Simmons blogged about the criticism here: <a href="http://blogs.msdn.com/dsimmons/archive/2007/06/02/persistence-ignorance-ok-i-think-i-get-it-now.aspx" target="_blank">Persistence
Ignorance: OK, I think I get it now</a>. 
</p>
        <h5>The suggested Solution: implement interfaces
</h5>
        <p>
In order to take away the need to implement a base-class, the EF-team created a few
interfaces that need to be implemented. That is as far as they can go in the first
release.
</p>
        <p>
So, you can implement 3 interfaces on your business objects, and no baseclass is needed.  
<br />
Although much better, I feel I should not have to spend time on, or burden my domain
layer with, code to facilitate data access. My domain layer should be able to focus
on one thing: solving the business problems of the client. 
<br />
By introducing other code to my domain layer, developers will be distracted.
</p>
        <p>
          <a href="http://devlicio.us/blogs/billy_mccafferty/default.aspx" target="_blank">Bill
McCafferty</a> posts about DDD (Domain Driven Design) and EF <a href="http://devlicio.us/blogs/billy_mccafferty/archive/2008/02/13/ddd-with-ado-net-entity-framework.aspx" target="_blank">here</a>.
He concludes:
</p>
        <blockquote>
          <p>
In short, and at the risk of being laconic, I feel that the ADO.NET Entity Framework
does for data communications what the ASP.NET page life cycle did for the presentation
layer.  In trying to introduce simplification and increased productivity, it's
actually going to result in higher complexity and decreased maintainability in the
long run.  I appreciate what Microsoft is trying to do, and absolutely love <a href="http://research.microsoft.com/specsharp/">some</a><a href="http://msdn2.microsoft.com/en-us/robotics/default.aspx">of</a><a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718948.aspx">their</a><a href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx">other</a><a href="http://msdn2.microsoft.com/en-us/library/bb397919.aspx">ideas</a>,
but, for now, I'm going to pass on the ADO.NET Entity Framework.
</p>
          <p>
Billy McCafferty
</p>
        </blockquote>
        <p>
He is quite right!!
</p>
        <h5>EF-Contrib: Easing the implementation of these interfaces
</h5>
        <p>
The 3 interfaces we are talking about are:
</p>
        <ul>
          <li>
IEntityWithChangeTracker 
</li>
          <li>
IEntityWithKey 
</li>
          <li>
IEntityWithRelationships 
</li>
        </ul>
        <p>
Implementing these interfaces is sometimes called "IPoco": Poco stands for Plain Old
C# (or Code) Object, and the I in IPoco means that you can still use your Poco object
but have to implement these interfaces. (so, not Poco at all... but still!)
</p>
        <p>
The current checked in project (find it <a href="http://www.codeplex.com/efcontrib" target="_blank">here</a>)
uses <a href="http://www.postsharp.org" target="_blank">Postsharp</a> to actually <strong>change</strong> the
IL-code of your assembly and implements these interfaces. That means that you can
build a domain layer with a class like this:
</p>
        <div style="FONT-FAMILY: courier new">    [Poco(<span style="COLOR: maroon">"ConnectionName"</span>)] 
<br />
    <span style="COLOR: blue">public</span> <span style="COLOR: blue">class</span> Person 
<br />
    { 
<br />
        <span style="COLOR: blue">public</span> <span style="COLOR: blue">int</span> PersonID
{ <span style="COLOR: blue">get</span>; <span style="COLOR: blue">set</span>; } 
<br />
        <span style="COLOR: blue">public</span> <span style="COLOR: blue">string</span> Firstname
{ <span style="COLOR: blue">get</span>; <span style="COLOR: blue">set</span>; } 
<br />
        <span style="COLOR: blue">public</span> <span style="COLOR: blue">string</span> Lastname
{ <span style="COLOR: blue">get</span>; <span style="COLOR: blue">set</span>; } 
<br />
    } 
</div>
        <p>
After compilation, the class will actually look a bit different on disk:
</p>
        <div style="FONT-FAMILY: courier new">    <span style="COLOR: blue">public</span> <span style="COLOR: blue">class</span> Person
: IEntityWithChangeTracker, IEntityWithKey, IEntityWithRelationships 
<br />
    { 
<br />
... 
<br />
    } 
<br /></div>
        <p>
So you can use this Person class, like you would use the classes that EF generates.
</p>
        <p>
It is important to understand that there will be very little runtime performance costs
involved. The code transformation is done at compile-time, once. At runtime, there
is no magic AOP or whatever involved.
</p>
        <p>
This approach is used by several other OR-Mappers and is very common in the Java world.
</p>
        <h5>Is this Persistence Ignorance?
</h5>
        <p>
Obviously, it's not. Hopefully, in version 2.0 of the Entity Framework, full ignorance
is achieved. However, if you want to use EF at your datalayer today, this approach
will let you focus on the important stuff, instead of data access code.
</p>
        <p>
Imagine changing your conceptual model. When implementing IPoco yourself, you will
have to take care to change all kinds of attributes on top of your properties. This
will quickly become a burden.
</p>
        <h5>How does it work?
</h5>
        <ul>
          <li>
You will need to download and install <a href="http://wwww.postsharp.org" target="_blank">Postsharp</a> on
all the machines that will build your application (developer machines and teambuild
machine(s)). 
</li>
          <li>
Your domain layer will have to reference the EntityFrameworkContrib.PostSharp4EF assembly,
and the PostSharp.Laos and PostSharp.Public assemblies. By referencing these, Postsharp
will know to do a post-compilation phase on your assemblies. 
</li>
          <li>
You will need to supply a 'psproj' file in your assembly, to let our attribute know
where it should look to actually do the implementation. This allows me to seperate
the implementation assembly from what you need at runtime! 
</li>
          <li>
You have already created your edmx file, which EF will dissect into the individual
.csdl, .msl and .ssdl files and place them in your bin/debug folder. 
</li>
          <li>
The project for now assumes a connection string to be present in your app.config 
</li>
          <li>
You can create your own simple business object. 
</li>
          <li>
That connection string is needed during the postcompilation phase to get to the individual
mapping files, so use the attribute [Poco("")] to let us know you need to change this
class. 
</li>
          <li>
The interfaces are implemented and the setters of your properties are modified to
actually do changetracking 
</li>
          <li>
Actually, at this moment: INotifyPropertyChanged is implemented as well (let me know
if you actually want this). 
</li>
        </ul>
        <p>
So, let's first look at the <strong>psproj</strong> file you need. In the Test-project,
there is one already:
</p>
        <pre>
          <span style="COLOR: blue">&lt;</span>
          <span style="COLOR: maroon">Project</span>
          <span style="COLOR: red">xmlns</span>="<span style="COLOR: blue">http://schemas.postsharp.org/1.0/configuration</span>"<span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">SearchPath</span><span style="COLOR: red">Directory</span>="<span style="COLOR: blue">../EntityFrameworkContrib.PostSharp4EF.Weaver/bin/{$Configuration}</span>"/<span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">SearchPath</span><span style="COLOR: red">Directory</span>="<span style="COLOR: blue">{$SearchPath}</span>"
/<span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">Tasks</span><span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">AutoDetect</span> /<span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">Compile</span><span style="COLOR: red">TargetFile</span>="<span style="COLOR: blue">{$Output}</span>" <span style="COLOR: red">IntermediateDirectory</span>="<span style="COLOR: blue">{$IntermediateDirectory}</span>" <span style="COLOR: red">CleanIntermediate</span>="<span style="COLOR: blue">false</span>"
/<span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span>/<span style="COLOR: maroon">Tasks</span><span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span>/<span style="COLOR: maroon">Project</span><span style="COLOR: blue">&gt;</span></pre>
        <p>
The referenced assembly EntityFrameworkContrib.PostSharp4EF only defines the Poco
attribute, but does not contain the actually 'code-weaving'. If we would have placed
the code-weaving in the same assembly as the Poco-attribute, you would have a much
larger assembly to reference and you could get into licensing problems. By separating
them, you only need to reference a tiny assembly.
</p>
        <p>
The weaving assembly should not be distributed with your final product!
</p>
        <p>
However, during the build, PostSharp does need to find the weaving assembly. Therefor,
you need to create a psproj file that extends it's normal searchpath to also include
the weaving dll. 
<br /><em>Take care in naming the file: it should be named "projectname.psproj".</em></p>
        <p>
When the project is more mature, you might find it best to actually just place the
weaving assembly into one of the default searchpaths for postsharp to find, <strong>and
you will not need this psproj file</strong>.
</p>
        <p>
Now, let's look at our <strong>attribute</strong>: 
<br />
In it's constructor, it takes the name of the EDMcontainer, which should match your
connection string. I have also added a few properties: Name, NamespaceName, PathToConfigFile.
I'll get back to these in a later post. In the future, others will be added.
</p>
        <p>
During the weaving, I have to do quite a bit of work to actually get to the correct
mapping files. So, I try to load in your app.config and extract the file path's from
it. The Testproject has the following app.config:
</p>
        <pre>
          <span style="COLOR: blue">&lt;?</span>
          <span style="COLOR: maroon">xml</span>
          <span style="COLOR: red">version</span>="<span style="COLOR: blue">1.0</span>" <span style="COLOR: red">encoding</span>="<span style="COLOR: blue">utf-8</span>"<span style="COLOR: blue">?&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">configuration</span><span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">connectionStrings</span><span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span><span style="COLOR: maroon">add</span><span style="COLOR: red">name</span>="<span style="COLOR: blue">OneSimpleTypeConnection</span>" <span style="COLOR: red">connectionString="metadata=.\bin\debug\OneSimpleType\OneSimpleType.csdl|.\bin\debug\OneSimpleType\OneSimpleType.ssdl|.\bin\debug\OneSimpleType\OneSimpleType.msl;provider</span>=System.Data.SqlClient;provider
connection <span style="COLOR: red">string</span>=<span style="COLOR: red">&amp;quot;</span>Data <span style="COLOR: red">Source</span>=VISTAX64\SQLEXPRESS;Initial <span style="COLOR: red">Catalog</span>=EntityFrameworkTest;Integrated <span style="COLOR: red">Security=True;MultipleActiveResultSets</span>=True<span style="COLOR: red">&amp;quot;</span>" <span style="COLOR: red">providerName</span>="<span style="COLOR: blue">System.Data.EntityClient</span>"
/<span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span>/<span style="COLOR: maroon">connectionStrings</span><span style="COLOR: blue">&gt;</span><span style="COLOR: blue">&lt;</span>/<span style="COLOR: maroon">configuration</span><span style="COLOR: blue">&gt;</span></pre>
        <p>
So, after loading that app.config, I use the supplied ConnectionContainer to get that
connectionstring, and then use some simple regex work to get the path's to the mapping
files. Then I try to load these to create a MetadataWorkspace.
</p>
        <p>
When I finally have a MetadataWorkspace, stuff get's easier: I can iterate the properties
in our original class and find the property in the metadataworkspace. Then I create
the correct EDMScalar Attributes on top of those.
</p>
        <p>
Implementing the interfaces is done by PostSharp, where it will look at an interface
and just use a class I provide to call when one of the interface methods is called.
</p>
        <h5>The result
</h5>
        <p>
Let's look through reflector at how the end result looks like. I won't show the methods,
to keep things short and sweet.
</p>
        <div style="FONT-FAMILY: courier new">
          <span style="COLOR: teal">  1</span> [EdmEntityType(Name=<span style="COLOR: maroon">"Person"</span>,
NamespaceName=<span style="COLOR: maroon">"EntityFrameworkContrib.PostSharp4EF.Tests.OneSimpleType"</span>)] 
<br /><span style="COLOR: teal">  2</span><span style="COLOR: blue">public</span> <span style="COLOR: blue">class</span> Person
: INotifyPropertyChanged, IComposed&lt;INotifyPropertyChanged&gt;, IProtectedInterface&lt;IFirePropertyChanged&gt;,
IPocoFacade, IComposed&lt;IPocoFacade&gt; 
<br /><span style="COLOR: teal">  3</span> { 
<br /><span style="COLOR: teal">  4</span>     <span style="COLOR: green">//
Fields</span><br /><span style="COLOR: teal">  5</span>     <span style="COLOR: blue">private</span> IPocoFacade
~EntityFrameworkContrib.PostSharp4EF.IPocoFacade; 
<br /><span style="COLOR: teal">  6</span>     <span style="COLOR: blue">private</span> <span style="COLOR: blue">readonly</span> InstanceCredentials
~instanceCredentials; 
<br /><span style="COLOR: teal">  7</span>     <span style="COLOR: blue">private</span> INotifyPropertyChanged
~System.ComponentModel.INotifyPropertyChanged; 
<br /><span style="COLOR: teal">  8</span>     [CompilerGenerated] 
<br /><span style="COLOR: teal">  9</span>     <span style="COLOR: blue">private</span> <span style="COLOR: blue">string</span> &lt;Firstname&gt;k__BackingField; 
<br /><span style="COLOR: teal">10</span>     [CompilerGenerated] 
<br /><span style="COLOR: teal">11</span>     <span style="COLOR: blue">private</span> <span style="COLOR: blue">string</span> &lt;Lastname&gt;k__BackingField; 
<br /><span style="COLOR: teal">12</span>     [CompilerGenerated] 
<br /><span style="COLOR: teal">13</span>     <span style="COLOR: blue">private</span> <span style="COLOR: blue">int</span> &lt;PersonID&gt;k__BackingField; 
<br /><span style="COLOR: teal">14</span><br /><span style="COLOR: teal">15</span>     <span style="COLOR: green">//
Methods</span><br /><span style="COLOR: teal">16</span>     <span style="COLOR: blue">static</span> Person(); 
<br /><span style="COLOR: teal">17</span>     <span style="COLOR: blue">public</span> Person(); 
<br /><span style="COLOR: teal">18</span>     <span style="COLOR: blue">void</span> INotifyPropertyChanged.add_PropertyChanged(PropertyChangedEventHandler
value); 
<br /><span style="COLOR: teal">19</span>     EntityKey IEntityWithKey.get_EntityKey(); 
<br /><span style="COLOR: teal">20</span>     RelationshipManager IEntityWithRelationships.get_RelationshipManager(); 
<br /><span style="COLOR: teal">21</span>     <span style="COLOR: blue">void</span> INotifyPropertyChanged.remove_PropertyChanged(PropertyChangedEventHandler
value); 
<br /><span style="COLOR: teal">22</span>     <span style="COLOR: blue">void</span> IEntityWithKey.set_EntityKey(EntityKey
value); 
<br /><span style="COLOR: teal">23</span>     <span style="COLOR: blue">void</span> IEntityWithChangeTracker.SetChangeTracker(IEntityChangeTracker
changeTracker); 
<br /><span style="COLOR: teal">24</span>     <span style="COLOR: blue">protected</span> InstanceCredentials
GetInstanceCredentials(); 
<br /><span style="COLOR: teal">25</span>     [DebuggerNonUserCode] 
<br /><span style="COLOR: teal">26</span>     IPocoFacade IComposed&lt;IPocoFacade&gt;.GetImplementation(InstanceCredentials
credentials); 
<br /><span style="COLOR: teal">27</span>     [DebuggerNonUserCode] 
<br /><span style="COLOR: teal">28</span>     INotifyPropertyChanged
IComposed&lt;INotifyPropertyChanged&gt;.GetImplementation(InstanceCredentials credentials); 
<br /><span style="COLOR: teal">29</span>     [DebuggerNonUserCode] 
<br /><span style="COLOR: teal">30</span>     IFirePropertyChanged IProtectedInterface&lt;IFirePropertyChanged&gt;.GetInterface(InstanceCredentials
credentials); 
<br /><span style="COLOR: teal">31</span><br /><span style="COLOR: teal">32</span>     <span style="COLOR: green">//
Properties</span><br /><span style="COLOR: teal">33</span>     [EdmScalarProperty(IsNull