<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Entity Framework Design : EDM</title><link>http://blogs.msdn.com/efdesign/archive/tags/EDM/default.aspx</link><description>Tags: EDM</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Foreign Keys in the Entity Framework</title><link>http://blogs.msdn.com/efdesign/archive/2009/03/16/foreign-keys-in-the-entity-framework.aspx</link><pubDate>Mon, 16 Mar 2009 23:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9481955</guid><dc:creator>efdesign</dc:creator><slash:comments>35</slash:comments><comments>http://blogs.msdn.com/efdesign/comments/9481955.aspx</comments><wfw:commentRss>http://blogs.msdn.com/efdesign/commentrss.aspx?PostID=9481955</wfw:commentRss><description>&lt;H3&gt;Background&lt;/H3&gt;
&lt;P&gt;A number of months ago &lt;A href="http://blogs.msdn.com/efdesign/archive/2008/10/27/foreign-keys-in-the-conceptual-and-object-models.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2008/10/27/foreign-keys-in-the-conceptual-and-object-models.aspx"&gt;we asked&lt;/A&gt; whether Foreign Keys (FKs) in Conceptual and Object models were important.&lt;/P&gt;
&lt;P&gt;The feedback we got indicated that there are a real mix of opinions on the topic. Some people are all for them while others think that FKs pollute the conceptual model. &lt;/P&gt;
&lt;P&gt;The fact that our customers were so divided meant we thought it was important to provide options here. Those who want FKs in their Entities should be able to do so, so they can gain all the benefits that having FKs in your Entities undoubtedly provide. On the other hand customers who are concerned that have FKs in their Entities in someway pollutes their model can continue to use the type of associations we had in .NET 3.5 SP1.&lt;/P&gt;
&lt;P&gt;In the past we've called the .NET 3.5 SP1 style Associations "first class" associations. Which while accurate somehow implies that associations based on FKs in Entities are "second class". In fact when we talked about this new work recently with our MVPs one of the first questions was "are these second class?", which they most definitely are not. &lt;/P&gt;
&lt;P&gt;The fact is these new associations are different but first class nevertheless.&lt;/P&gt;
&lt;H3&gt;So what's been added?&lt;/H3&gt;
&lt;P&gt;In .NET 4.0 we will add support for a new type of association called "FK Associations". &lt;/P&gt;
&lt;P&gt;The way this works is we will allow you to include your FK columns in your entities as "FK properties", and once you have FK Properties in your entity you can create an "FK Association" that is dependent upon those properties. &lt;/P&gt;
&lt;P&gt;Okay so we will have "FK Associations", what are we going to call the older style associations? Obviously saying something like ".NET 3.5 SP1 style Associations" every time isn't ideal. So we are going to call them "Independent Associations".&lt;/P&gt;
&lt;P&gt;The term "Independent Association" resonates for us because they are independently mapped, whereas FK Associations need no mapping, simply mapping the Entity(Set) is sufficient.&lt;/P&gt;
&lt;H3&gt;How do I use an "FK Association"?&lt;/H3&gt;
&lt;P&gt;The real reason so many customers and partners are asking for "FK Associations" is that they significantly simplify some key coding patterns. So much so that we are convinced that for most people "FK Associations" will be an automatic choice going forward.&lt;/P&gt;
&lt;P&gt;Some of the things that are hard with "Independent Associations" are trivially easy using FK Associations. Scenarios as diverse as DataBinding, Dynamic Data, Concurrency Control,&amp;nbsp; ASP.NET MVC Binders, N-Tier etc are all positively impacted.&lt;/P&gt;
&lt;P&gt;Let's have a look at some code snippets that will work with "FK Associations":&lt;/P&gt;
&lt;P&gt;1) Create a new Product and FK Association to an existing Category by setting the FK Property directly:&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt; (&lt;SPAN style="COLOR: blue"&gt;var&lt;/SPAN&gt; context = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Context&lt;/SPAN&gt;()) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;//Create a product and a relationship to a known category by ID &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Product&lt;/SPAN&gt; p = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Product &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ID = 1, &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Name = &lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"Bovril"&lt;/SPAN&gt;, &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;CategoryID = 13 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;};&amp;nbsp; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;//Add the product (and create the relationship by FK value) &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;context.Products.AddObject(p); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;context.SaveChanges(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;This sort of approach works both for insert and update, and is particular useful for things like databinding, where you often have the new Value of the FK in a grid or something but you don't have the corresponding object, and you don't want to wear the cost of a query to pull back the principal object (i.e. the Category).&lt;/P&gt;
&lt;P&gt;2) Create a new Product and a new FK Association to an existing Category by setting the reference instead:&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; Create_new_Product_in_existing_Category_by_reference() &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; (&lt;SPAN style="COLOR: blue"&gt;var&lt;/SPAN&gt; context = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Context&lt;/SPAN&gt;()) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;//Create a new product and relate to an existing category &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Product&lt;/SPAN&gt; p = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Product &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&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; &lt;/SPAN&gt;ID = 1, &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&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; &lt;/SPAN&gt;Name = &lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"Bovril"&lt;/SPAN&gt;, &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&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; &lt;/SPAN&gt;Category = context.Categories &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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Single(c =&amp;gt; c.Name == &lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"Food"&lt;/SPAN&gt;) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Note: no need to add the product, because relating &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN style="COLOR: green"&gt;&amp;nbsp; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// to an existing category does that automatically. &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Also notice the use of the Single() query operator&amp;nbsp; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// this is new to EF in .NET 4.0 too. &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;context.SaveChanges(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;} &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;} &lt;BR&gt;&lt;BR&gt;This programming pattern is not new to the Entity Framework, you could do this in .NET 3.5 SP1. I called it out because it shows you can still write the sort of code you write with Independent Associations even when using FK Associations.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;3) Update an existing Product without informing the Entity Framework about the original value of the CategoryID (not supported with Independent Associations):&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; Edit(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Product&lt;/SPAN&gt; editedProduct) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; (&lt;SPAN style="COLOR: blue"&gt;var&lt;/SPAN&gt; context = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Context&lt;/SPAN&gt;()) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Create a stand-in for the original entity &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// by just using the ID. Of the editedProduct &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Note: you don't have to provide an existing Category or CategoryID &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;context.Products.Attach( &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;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Product&lt;/SPAN&gt; { ID = editedProduct.ID }); &lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Now update with new values including CategoryID &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;context.Products.ApplyCurrentValues(editedProduct); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;context.SaveChanges(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;} &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;In this example "editedProduct" is a product which has been edited somewhere, this is exactly the sort of the code you might write in the Edit method of a ASP.NET MVC controller, and is a great improvement over the code you have to write using Independent Associations.&lt;/P&gt;
&lt;P&gt;There is much more you can do with FK Associations, but these 3 samples give you a flavor of the sort of coding patterns FK Associations allow. &lt;/P&gt;
&lt;H4&gt;Keeping FKs and References in Sync&lt;/H4&gt;
&lt;P&gt;One thing that hasn't been mentioned so far is that the Entity Framework tries to keep related References and FKs in sync as much as possible. &lt;/P&gt;
&lt;P&gt;When this synchronization occurs depends upon when the Entity Framework is notified of changes, which depends upon the type of Entity Classes involved: be they POCO with Proxies, POCO without Proxies, IPOCO or EntityObjects etc. &lt;/P&gt;
&lt;P&gt;Another post will cover this in more detail.&lt;/P&gt;
&lt;H3&gt;How do I create an "FK Association"?&lt;/H3&gt;
&lt;P&gt;There are a number of ways. &lt;/P&gt;
&lt;P&gt;One mainline scenario is when using the tools to infer a model from a database. We have added an option to choose whether "FK Associations" or "Independent Associations" are generated by default. The same is true if you use EdmGen.exe (i.e. our command line tool).&lt;/P&gt;
&lt;P&gt;The second mainline scenario for creating FK Associations is creating a model from scratch, aka &lt;A href="http://blogs.msdn.com/efdesign/archive/2008/09/10/model-first.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2008/09/10/model-first.aspx"&gt;Model First&lt;/A&gt; which is new to .NET 4.0.&lt;/P&gt;
&lt;P&gt;Here are the steps involved:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Create two Entities (say Product and Category) that look something like this: &lt;BR&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep1.jpg" mce_href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep1.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=ProductCategoryStep1 src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep1_thumb.jpg" width=455 height=158 mce_src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep1_thumb.jpg"&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Add a property that will be the FK Property: i.e. CategoryID &lt;BR&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep2.jpg" mce_href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=ProductCategoryStep2 src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep2_thumb.jpg" width=495 height=227 mce_src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep2_thumb.jpg"&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Create an association between the two EntityTypes with the correct end multiplicities and NavigationProperty names: &lt;BR&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep3.jpg" mce_href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep3.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=ProductCategoryStep3 src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep3_thumb.jpg" width=427 height=412 mce_src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep3_thumb.jpg"&gt;&lt;/A&gt; &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Double Click the line between the two Entities, that represents the Association, and add a Referential Integrity Constraint: &lt;BR&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep4.jpg" mce_href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep4.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=ProductCategoryStep4 src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep4_thumb.jpg" width=374 height=297 mce_src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep4_thumb.jpg"&gt;&lt;/A&gt; &lt;BR&gt;This is the step that tells the Entity Framework that the CategoryID is an "FK Property" and that the "CategoryProduct" association is an "FK Association". &lt;BR&gt;&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;You end up with something that looks like this: &lt;BR&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep5.jpg" mce_href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep5.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=ProductCategoryStep5 src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep5_thumb.jpg" width=476 height=235 mce_src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/ForeignKeysintheEntityFramework_D970/ProductCategoryStep5_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;And you are done you've set up an FK Association. Notice that this association doesn't need to be mapped you simply need to make sure you map all the properties of both Entities.&lt;/P&gt;
&lt;P&gt;Very easy.&lt;/P&gt;
&lt;H3&gt;Summary&lt;/H3&gt;
&lt;P&gt;In .NET 4.0 we will add support for FK Properties and FK Associations to the Entity Framework. The existing style Independent Associations will still be possible, but we expect that FK Associations will become most peoples automatic choice because they simplify so many common Entity Framework coding tasks.&lt;/P&gt;
&lt;P&gt;As always we'd love to hear your thoughts on this work.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;A href="http://blogs.msdn.com/alexj" mce_href="http://blogs.msdn.com/alexj"&gt;Alex James&lt;/A&gt;, &lt;BR&gt;&lt;/B&gt;Program Manager, Entity Framework Team, Microsoft.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;I&gt;This post is part of the transparent design exercise in the Entity Framework Team. To understand how it works and how your feedback will be used please look at &lt;/I&gt;&lt;/B&gt;&lt;A href="http://blogs.msdn.com/efdesign/archive/2008/06/23/transparency-in-the-design-process.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2008/06/23/transparency-in-the-design-process.aspx"&gt;&lt;B&gt;&lt;I&gt;this post&lt;/I&gt;&lt;/B&gt;&lt;/A&gt;&lt;B&gt;&lt;I&gt;. &lt;/I&gt;&lt;/B&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9481955" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/efdesign/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/EDM/default.aspx">EDM</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/N-Tier/default.aspx">N-Tier</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Designer/default.aspx">Designer</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/FKs/default.aspx">FKs</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Entity+Framework+4/default.aspx">Entity Framework 4</category></item><item><title>Update on Computed Properties</title><link>http://blogs.msdn.com/efdesign/archive/2009/01/13/update-on-computed-properties.aspx</link><pubDate>Tue, 13 Jan 2009 07:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9312717</guid><dc:creator>efdesign</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/efdesign/comments/9312717.aspx</comments><wfw:commentRss>http://blogs.msdn.com/efdesign/commentrss.aspx?PostID=9312717</wfw:commentRss><description>&lt;P&gt;A while back I wrote a post that introduced the concept of &lt;A href="http://blogs.msdn.com/efdesign/archive/2008/06/27/computed-properties-one-pager.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2008/06/27/computed-properties-one-pager.aspx"&gt;Computed Properties&lt;/A&gt;. Since that time we’ve had a number of conversations with both customers and internal partners and we’ve had some new ideas, that have changed our thinking somewhat.&amp;nbsp; &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;First off we decided to implement &lt;A href="http://blogs.msdn.com/efdesign/archive/2009/01/07/model-defined-functions.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2009/01/07/model-defined-functions.aspx"&gt;Model Defined Functions&lt;/A&gt;, which are significantly more powerful and flexible than Computed Properties, and provide overlapping capabilities.&lt;/LI&gt;
&lt;LI&gt;Computed Properties on the other hand, would never have been structurally part of the entity, which lead to some tough choices and probable customer confusion:&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Do you always pay the cost of materializing the Computed Property even when it is not required?&lt;/LI&gt;
&lt;LI&gt;What about if there are lots of Computed Properties on the Entity?&lt;/LI&gt;
&lt;LI&gt;Today in order to materialize an Entity and it's properties, computed or otherwise, the Entity Framework needs access to setters. Unfortunately the existence of the Setter, sends an erroneous message that Computed Properties can be altered and persisted.&lt;/LI&gt;
&lt;LI&gt;Upon further investigation we discovered that Computed Properties didn't actually address the requirements of Reporting Services, which was one of the original drivers for Computed Properties. Our original design called for computed properties to operate over an instance of an Entity, and it turned out that Reporting Services needed computed properties to operate over both an instance and a set of instances. Model Defined Functions on the other hand are flexible enough to handle both of these scenarios.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;In the future it may be possible to gain all the benefits of computed properties without any of the above issues, by extending our integration of Model Defined Functions with LINQ so that the &lt;B&gt;[EdmFunction]&lt;/B&gt; attribute can be applied to CLR properties too. &lt;BR&gt;&lt;BR&gt;If we did this the first parameter of the specified Model Defined Functions could be mapped to be the CLR type containing the property itself.&amp;nbsp; This would allow a Computed Property, backed by a Model Defined Function, to be used in a targeted way in LINQ queries, without any of the illusions that this might somehow be set-able or structurally part of the entity.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Given all these points we started to think Computed Properties just weren’t as important. &lt;/P&gt;
&lt;P&gt;We think our best course of actions in the short term is 1) to focus on supporting Model Defined Functions and 2) ask for your feedback on the relative importance of Computed Properties given the points listed above.&lt;/P&gt;
&lt;P&gt;So what do you think? &lt;/P&gt;
&lt;P&gt;Do &lt;A href="http://blogs.msdn.com/efdesign/archive/2009/01/07/model-defined-functions.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2009/01/07/model-defined-functions.aspx"&gt;Model Defined Functions&lt;/A&gt; address most of the scenarios for &lt;A href="http://blogs.msdn.com/efdesign/archive/2008/06/27/computed-properties-one-pager.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2008/06/27/computed-properties-one-pager.aspx"&gt;Computed Properties&lt;/A&gt;?&lt;/P&gt;
&lt;P&gt;Particularly if in the future we can treat CLR properties as stubs for Model Defined Functions?&lt;/P&gt;
&lt;P&gt;As always we are very keen to hear what you think.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;A href="http://blogs.msdn.com/alexj" mce_href="http://blogs.msdn.com/alexj"&gt;Alex James&lt;/A&gt;&lt;/B&gt; &lt;BR&gt;Program Manager &lt;BR&gt;Microsoft&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;I&gt;This post is part of the transparent design exercise in the Entity Framework Team. To understand how it works and how your feedback will be used please look at &lt;/I&gt;&lt;/B&gt;&lt;A href="http://blogs.msdn.com/efdesign/archive/2008/06/23/transparency-in-the-design-process.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2008/06/23/transparency-in-the-design-process.aspx"&gt;&lt;B&gt;&lt;I&gt;this post&lt;/I&gt;&lt;/B&gt;&lt;/A&gt;&lt;B&gt;&lt;I&gt;. &lt;BR&gt;&lt;BR&gt;&lt;/I&gt;NB:&lt;/B&gt; For more background on the origins of &lt;B&gt;[EdmFunction]&lt;/B&gt; check out this &lt;A href="http://blogs.msdn.com/efdesign/archive/2008/10/08/edm-and-store-functions-exposed-in-linq.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2008/10/08/edm-and-store-functions-exposed-in-linq.aspx"&gt;post&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9312717" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/efdesign/archive/tags/EDM/default.aspx">EDM</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Reporting/default.aspx">Reporting</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Functions/default.aspx">Functions</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Entity+Framework+4/default.aspx">Entity Framework 4</category></item><item><title>Model Defined Functions</title><link>http://blogs.msdn.com/efdesign/archive/2009/01/07/model-defined-functions.aspx</link><pubDate>Wed, 07 Jan 2009 23:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9290047</guid><dc:creator>efdesign</dc:creator><slash:comments>21</slash:comments><comments>http://blogs.msdn.com/efdesign/comments/9290047.aspx</comments><wfw:commentRss>http://blogs.msdn.com/efdesign/commentrss.aspx?PostID=9290047</wfw:commentRss><description>&lt;P&gt;Today the Entity Framework, and more specifically the Entity Data Model, have a limited notion of Functions.&lt;/P&gt;
&lt;P&gt;We are currently restricted to Function Imports that allow stored procedures to be invoked, and Canonical / Store Functions for database independent and database specific functions respectively.&lt;/P&gt;
&lt;P&gt;Now however we want to &lt;SPAN style="mso-fareast-language: ja"&gt;support functions defined, not just declared, in the EDM (&lt;A href="http://blogs.msdn.com/alexj/archive/2008/11/24/edm-misconceptions.aspx" mce_href="http://blogs.msdn.com/alexj/archive/2008/11/24/edm-misconceptions.aspx"&gt;aka. the CSDL&lt;/A&gt;). &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-fareast-language: ja"&gt;An example would be: &lt;/SPAN&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt; mso-layout-grid-align: none; mso-outline-level: 1" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: #a31515; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;Function&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: red; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;"&lt;SPAN style="COLOR: blue"&gt;GetAge&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ReturnType&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Edm.Int32&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: #a31515; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;Parameter&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: red; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;"&lt;SPAN style="COLOR: blue"&gt;Person&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Model.Person&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: #a31515; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&amp;gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN style="mso-tab-count: 2"&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&gt;&lt;FONT color=#000000&gt;Edm.DiffYears(Edm.CurrentDateTime(), Person.Birthday)&lt;/FONT&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: #a31515; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: ; COLOR: #a31515; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;Function&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&amp;gt; &lt;/SPAN&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-no-proof: yes"&gt;Here are some things to notice:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes"&gt;The DefiningExpression is eSQL.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes"&gt;The function can have zero or more parameters.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes"&gt;The Function must have a return type.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes"&gt;Function Parameters are referenced directly by Name in the DefiningExpression: meaning there is no parameter denoting prefix like @. This means you must be careful to choose parameter names that don't collide with identifiers you need to use in the rest of eSQL expression.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-no-proof: yes"&gt;Unlike functions in SSDL, functions in CSDL only support In bound Parameters (i.e &lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Mode&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;In&lt;/SPAN&gt;") &lt;/SPAN&gt;&lt;SPAN style="mso-no-proof: yes; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;because otherwise they become non-composable.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-no-proof: yes; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;For this reason the &lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Mode&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="mso-no-proof: yes; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;of a parameter cannot be set in CSDL (it is always &lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Mode&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;In&lt;/SPAN&gt;"&lt;/SPAN&gt;&lt;SPAN style="mso-no-proof: yes; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;).&lt;/SPAN&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 1"&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes"&gt;Functions are declared as Global Items and are declared&amp;nbsp;within the &lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Schema&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN style="mso-no-proof: yes"&gt;element. As such there identity is made up of the Schema's namespace and the function name.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes"&gt;The function parameters and return type can be any of the following:&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes"&gt;A scalar type or collection of scalar types.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-no-proof: yes"&gt;An entity type or collection of entity types.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-no-proof: yes"&gt;A complex type or collection of complex types.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-no-proof: yes"&gt;A row type or collection of row types (See below).&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-no-proof: yes"&gt;A ref type or collection of ref types.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;SPAN style="mso-no-proof: yes"&gt;Functions with a DefiningExpression do not require mapping, since the eSQL expression is composed out of eSQL fragments that are already mapped.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;SPAN style="mso-no-proof: yes"&gt;Functions without a DefiningExpression are simply declarations. Today the Entity Framework doesn't complain when loading a CSDL with such a function, but you can't invoke it. In the future these functions might be used to support mapping Table Value Functions in the store to functions in the Conceptual Model.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN&gt;Since it is trivial in eSQL to create arbitrary un-named types, imagine a projection that projects 3 of the properties from an Entity, we now need a mechanism for defining these "RowTypes" inline, so that they can be used when defining Function Parameters and ReturnTypes. For example:&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes; mso-fareast-language: ja"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes; mso-fareast-language: ja"&gt;Parameter&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;Coordinate&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;RowType&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Property&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;X&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Nullable&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt; &lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Y&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Nullable&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt; &lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Z&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Nullable&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;RowType&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Parameter&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN&gt;Since eSQL is primarily set based, we also need a way of defining parameters and return types that are collections of RowTypes: &lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes; mso-fareast-language: ja"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes; mso-fareast-language: ja"&gt;Parameter&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;Coordinates&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;CollectionType&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="COLOR: blue"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;RowType&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Property&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;X&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Nullable&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt; &lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Y&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Nullable&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt; &lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Z&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Nullable&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;RowType&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;CollectionType&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;Parameter&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;Using the Function via eSQL:&lt;/H3&gt;
&lt;P&gt;It is trivial to use the function via eSQL. For example:&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: #17365d" new?;="new?;" courier="courier" mso-themecolor:="mso-themecolor:" mso-themeshade:="mso-themeshade:" 191?="191?" text2;="text2;" JA;="JA;" mso-fareast-language:="mso-fareast-language:"&gt;SELECT&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: " new?;="new?;" courier="courier" mso-fareast-language:="mso-fareast-language:" JA?="JA?"&gt; Namespace.GetAge(p) &lt;BR&gt;&lt;SPAN style="COLOR: #17365d; mso-themecolor: text2; mso-themeshade: 191"&gt;FROM&lt;/SPAN&gt; Container.People &lt;SPAN style="COLOR: #17365d; mso-themecolor: text2; mso-themeshade: 191"&gt;AS&lt;/SPAN&gt; P &lt;BR&gt;&lt;SPAN style="COLOR: #17365d; mso-themecolor: text2; mso-themeshade: 191"&gt;WHERE&lt;/SPAN&gt; P.Firstname = &lt;SPAN style="COLOR: red"&gt;‘Jim’ &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;Here we get Jim's age, assuming of course there is only one Jim!&lt;/P&gt;
&lt;P&gt;It is also possible to compose functions together, you must simply ensure return types and target parameter types are the same (in the case of named types) or structurally equivalent (in the case of row types or collections of row types).&lt;/P&gt;
&lt;P&gt;Things get a little trickier when you are dealing with functions that return sets, for example imagine a function that returns someone's friends, used in conjunction with the GetAge function:&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: #1f497d" new?;="new?;" courier="courier" mso-themecolor:="mso-themecolor:" text2?="text2?"&gt;SELECT&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: " courier="courier" new??="new??"&gt; &lt;SPAN style="COLOR: #1f497d; mso-themecolor: text2"&gt;VALUE&lt;/SPAN&gt; (F) &lt;BR&gt;&lt;SPAN style="COLOR: #1f497d; mso-themecolor: text2"&gt;FROM&lt;/SPAN&gt; Container.People &lt;SPAN style="COLOR: #1f497d; mso-themecolor: text2"&gt;AS&lt;/SPAN&gt; P &lt;BR&gt;&lt;SPAN style="COLOR: #1f497d; mso-themecolor: text2"&gt;CROSS&lt;/SPAN&gt; &lt;SPAN style="COLOR: #1f497d; mso-themecolor: text2"&gt;APPLY&lt;/SPAN&gt; Namespace.GetFriends(P) &lt;SPAN style="COLOR: #1f497d; mso-themecolor: text2"&gt;AS&lt;/SPAN&gt; F &lt;BR&gt;&lt;SPAN style="COLOR: #1f497d; mso-themecolor: text2"&gt;WHERE&lt;/SPAN&gt; Namespace.GetAge(P) &amp;gt; 21 &lt;/SPAN&gt;
&lt;P&gt;Here we get all the friends of people older than 21.&lt;/P&gt;
&lt;P&gt;As you can see to do this sort of thing you need a crash course in eSQL. &lt;/P&gt;
&lt;H3&gt;Using the Function via LINQ:&lt;/H3&gt;
&lt;P&gt;It is also possible to use these functions in LINQ, but this does require a extra step to create an appropriate stub function in the CLR.&lt;/P&gt;
&lt;P&gt;This solution is based on the techniques described &lt;A href="http://blogs.msdn.com/efdesign/archive/2008/10/08/edm-and-store-functions-exposed-in-linq.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2008/10/08/edm-and-store-functions-exposed-in-linq.aspx"&gt;here&lt;/A&gt;, and involves creating a Stub function in the CLR language of your choice, and annotating it something like this:&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;[&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;EdmFunction&lt;/SPAN&gt;&lt;/SPAN&gt;(&lt;FONT color=#ff0000&gt;"Namespace"&lt;/FONT&gt;, &lt;FONT color=#ff0000&gt;"GetAge"&lt;/FONT&gt;)] &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt; &lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;static &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;int &lt;/SPAN&gt;GetAge(&lt;SPAN style="COLOR: #2b91af"&gt;Person&lt;/SPAN&gt; p) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;{&amp;nbsp; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;throw new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #31849b; mso-themecolor: accent5; mso-themeshade: 191"&gt;NotSupportedException&lt;/SPAN&gt;&lt;SPAN style="COLOR: #1f497d; mso-themecolor: text2"&gt;(…); &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: ; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;}&lt;/SPAN&gt;&lt;SPAN style="mso-fareast-language: ja"&gt; &lt;/SPAN&gt;
&lt;P&gt;The Entity Framework uses the signature of the function and the EdmFunction attribute to map calls to this function when encountered to the appropriate Model Defined Function.&lt;/P&gt;
&lt;P&gt;Once you have this stub it is then trivial to use it in a LINQ query like this:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: ; COLOR: blue; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;var&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt; peopleOver21 = &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/SPAN&gt; p &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;ctx&lt;/SPAN&gt;.People &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: ; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/SPAN&gt; GetAge(p) &amp;lt; 21 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: ; FONT-SIZE: 10pt" new?;="new?;" courier="courier" yes?="yes?" mso-no-proof:="mso-no-proof:"&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select&lt;/SPAN&gt; p; &lt;/SPAN&gt;
&lt;P&gt;Indeed if you are familiar with LINQ you will probably find composing functions together a lot easier too:&lt;/P&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;var&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; friendOfPeopleOver21 = &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;/SPAN&gt; p &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;ctx&lt;/SPAN&gt;.People &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;from&lt;/SPAN&gt;&amp;nbsp;&lt;FONT color=#000000&gt;f&lt;/FONT&gt; &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt;&amp;nbsp;&lt;FONT color=#000000&gt;GetFriends(p)&lt;/FONT&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;/SPAN&gt; GetAge(p) &amp;lt; 21 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select&lt;/SPAN&gt; f; 
&lt;P mce_keep="true"&gt;&lt;/SPAN&gt;Notice that the CLR functions don't need to be directly callable, in the example above the CLR stub throws an exception if called directly. &lt;/P&gt;
&lt;P&gt;However the existence of the stub allows you to create LINQ expressions that compile correctly, and then at runtime, when used in a LINQ to Entities query, the function call is simply translated by the entity framework into a query that runs in the database.&lt;/P&gt;
&lt;H3&gt;Summary&lt;/H3&gt;
&lt;P&gt;As you can see Model Defined Function's are very powerful, and this post has barely scratched the surface of possibilities they open up.&lt;/P&gt;
&lt;P&gt;The Entity Framework team would love to hear your comments.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A href="http://blogs.msdn.com/alexj" mce_href="http://blogs.msdn.com/alexj"&gt;Alex James&lt;/A&gt;&lt;/STRONG&gt;&amp;nbsp; &lt;BR&gt;Program Manager, &lt;BR&gt;Entity Framework Team&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;This post is part of the transparent design exercise in the Entity Framework Team. To understand how it works and how your feedback will be used please look at &lt;A href="http://blogs.msdn.com/efdesign/archive/2008/06/23/transparency-in-the-design-process.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2008/06/23/transparency-in-the-design-process.aspx"&gt;this post&lt;/A&gt;.&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9290047" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/efdesign/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/EDM/default.aspx">EDM</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Linq+to+Entities/default.aspx">Linq to Entities</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Functions/default.aspx">Functions</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/eSQL/default.aspx">eSQL</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Entity+Framework+4/default.aspx">Entity Framework 4</category></item><item><title>Structural Annotations - One Pager</title><link>http://blogs.msdn.com/efdesign/archive/2008/08/12/structural-annotations-one-pager.aspx</link><pubDate>Tue, 12 Aug 2008 22:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8853248</guid><dc:creator>efdesign</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/efdesign/comments/8853248.aspx</comments><wfw:commentRss>http://blogs.msdn.com/efdesign/commentrss.aspx?PostID=8853248</wfw:commentRss><description>&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;In V1 of the Entity Framework &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;it is possible to annotate a schema using attributes declared in another XSD. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;However XML attributes are a very limited form of annotation. It would be better if we could annotate using full elements.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;This is what we are calling Structural Annotations. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;This feature will allow both customers and partners like Reporting Services to modify the model so that it includes information important to them which can’t be captured in vanilla EDM format.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="border-style: solid none none; border-color: rgb(51, 51, 153) -moz-use-text-color -moz-use-text-color; border-width: 1pt medium medium; padding: 1pt 0in 0in;"&gt;
&lt;h3&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;1&lt;a class="" title="_Toc205113853" name="_Toc205113853"&gt;&lt;/a&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal;" times="" new="" roman??=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;EDM extensions &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;While it should be possible to annotate any level in the XML hierarchy, there are however some restrictions.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;The general rule is you can annotation any CSDL / SSDL element that has a corresponding&amp;nbsp; &lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%; font-family: 'Courier New';"&gt;MetadataItem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;which&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt; in practice means everything except &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Using&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt;&lt;/span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Schema&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt;&lt;/span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Key&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/span&gt;and &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;PropertyRef&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/span&gt;elements.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;These annotations should be named, so that they can be accessed using the same API as today. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;i.e. something like this: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;EntityType&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;Content&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Key&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&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&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;PropertyRef&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;ID&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Key&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;ID&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Guid&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Nullable&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;false&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;HTML&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;String&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Nullable&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;false&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;MaxLength&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Max&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Unicode&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;true&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;FixedLength&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;false&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;CLR:Attributes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&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&gt;&amp;lt;CLR:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Attribute&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;TypeName&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;System.Runtime.Serialization.DataContract&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&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&gt;&amp;lt;CLR:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Attribute&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;TypeName&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;MyNamespace.MyAttribute&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;CLR:Attributes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;RS:Security&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&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&gt;&amp;lt;RS:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;ACE&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Principal&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;S-0-123-1321&lt;/span&gt;" &lt;span style="color: red;"&gt;Rights&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;+R+W&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt; &lt;br&gt;&lt;span style=""&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&gt;&amp;lt;RS:&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;ACE&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Principal&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;S-0-123-2321&lt;/span&gt;" &lt;span style="color: red;"&gt;Rights&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;-R-W&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt; &lt;br&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;RS:Security&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;EntityType&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style=""&gt;&lt;span style=""&gt;1.1&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal;" times="" new="" roman??=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Key points to notice:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;In &lt;/span&gt;&lt;/span&gt;the above example both the &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;CLR&lt;/span&gt; and &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;RS&lt;/span&gt; namespaces must have been declared somewhere. Probably at the root of the CSDL somewhere, i.e. something like this: &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Schema&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;xmlns:RS&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;http://schemas.microsoft.com/RS/2006&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns:CLR&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://schemas.microsoft.com/net/3.5" mce_href="http://schemas.microsoft.com/net/3.5"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;http://schemas.microsoft.com/net/3.5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;…&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;Alternatively the namespace could be in lined in the annotation: &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Security&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;xmlns&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;http://schemas.microsoft.com/RS/2006&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&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&gt;… &lt;br&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Security&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;In both cases the unique identity of the annotation is in the form &lt;i style=""&gt;{namespace}:{elementname}&lt;/i&gt;. So for the RS Security annotation example, irrespective of how the RS namespace is introduced the identity would be: &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://schemas.microsoft.com/RS/2006:Security" mce_href="http://schemas.microsoft.com/RS/2006:Security"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;http://schemas.microsoft.com/RS/2006:Security&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;Structural annotations should always follow all other sub-elements i.e. when structurally annotating an &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;EntityType&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/span&gt;element the annotation element should follow all &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Key&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt;&lt;/span&gt; and &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;NavigationProperty&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/span&gt;elements. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;Attribute based annotations (as supported in V1 and used for things like CodeGen) are scoped to the same annotation identity namespace. Hence care should be taken to verify that annotations using either approach don’t have colliding identities. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;It should be possible to have more than one named “Structural Annotation” per CSDL (or SSDL) element. Indeed element names can collide so long as the combination of Namespace + Element Name is unique for a particular element (or more specifically each &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;MetadataItem&lt;/span&gt;). This means for instance you can’t have two &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;RS:Security&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/span&gt;elements under any one &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;MetadataItem&lt;/span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;h4&gt;&lt;span style=""&gt;&lt;span style=""&gt;1.2&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal;" times="" new="" roman??=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Positive and Negative Cases:&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;This: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;EntityType&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;Content&lt;/span&gt;" &lt;span style="color: red;"&gt;CLR:Attribute&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Blah&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;CLR:Attributes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&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&gt;&amp;lt;CLR:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Attribute&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;TypeName&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;System.Runtime.Serialization.DataContract&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;CLR:Attributes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;…would be invalid, because of the identity collision, likewise this would also be invalid: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;EntityType&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;Content&lt;/span&gt;" &lt;span style="color: red;"&gt;My:Attribute&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Blah&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;CLR:Attributes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&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&gt;&amp;lt;CLR:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Attribute&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;TypeName&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;System.Runtime.Serialization.DataContract&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;CLR:Attributes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;CLR:Attributes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&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&gt;&amp;lt;CLR:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Attribute&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;TypeName&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;MyNamespace.MyAttribute&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;CLR:Attributes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;where-as this is fine: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;EntityType&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;Content&lt;/span&gt;" &lt;span style="color: red;"&gt;My:Attribute&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Blah&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;CLR:Attributes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&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&gt;&amp;lt;CLR:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Attribute&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;TypeName&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;System.Runtime.Serialization.DataContract&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;CLR:Attributes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;RS:Security&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&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&gt;&amp;lt;RS:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;ACE&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Principal&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;span style="color: blue;"&gt;S-0-123-1321&lt;/span&gt;" &lt;span style="color: red;"&gt;Rights&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;+R+W&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt; &lt;br&gt;&lt;span style=""&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&gt;&amp;lt;RS:&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;ACE&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Principal&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;S-0-123-2321&lt;/span&gt;" &lt;span style="color: red;"&gt;Rights&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;-R-W&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt; &lt;br&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;RS:Security&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;… since all the above annotations have unique identities. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;1.3&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal;" times="" new="" roman??=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;What can an &amp;lt;Annotation&amp;gt; contain&lt;/span&gt;?&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;A structural annotation is simply an XML element. As such it can be considered a root of an XML document that can contain any valid XML structures. These structures are simply ignored by the Entity Framework and Metadata APIs. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;1.4&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal;" times="" new="" roman??=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;What elements can be annotated&lt;/span&gt;?&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;If an element in the CSDL or SSDL has a corresponding &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;MetadataItem&lt;/span&gt; in the Metadata API that element should support structural annotations. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;Since &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Using&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt;&lt;/span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Schema&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt;&lt;/span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Key&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/span&gt;and &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;PropertyRef&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/span&gt;elements have no corresponding &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;MetadataItem&lt;/span&gt;(s) they don’t support structural annotations. 
&lt;p mce_keep="true"&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;Notice while &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;TypeUsage&lt;/span&gt;(s) have no CSDL representation today,they are &lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%; font-family: 'Courier New';"&gt;MetadataItem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;(s) so they could in theory be annotated in the future. For example if a public mutable metadata API is produced.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="border-style: solid none none; border-color: rgb(51, 51, 153) -moz-use-text-color -moz-use-text-color; border-width: 1pt medium medium; padding: 1pt 0in 0in;"&gt;
&lt;h3&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal;" times="" new="" roman??=""&gt;&lt;b&gt;&lt;font face="Verdana" size="4"&gt;2&lt;/font&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Metadata API Changes:&lt;/h3&gt;&lt;/div&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;In this example we are using the Entity Frameworks Metadata API to get the &lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); font-family: 'Courier New';"&gt;EdmType&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;for an &lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); font-family: 'Courier New';"&gt;EntityType &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;called Content. From that we then get the &lt;span style="color: rgb(43, 145, 175);"&gt;MetadataProperty&lt;/span&gt; called &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://schemas.microsoft.com/RS/2006:Security" mce_href="http://schemas.microsoft.com/RS/2006:Security"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;http://schemas.microsoft.com/RS/2006:Security&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175);" yes?="" mso-no-proof:="" new?;="" courier=""&gt;EdmType&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; contentType = metadataWorkspace.GetEdmType(&lt;span style="color: red;"&gt;“MyNamespace.Content”&lt;/span&gt;); &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;if&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; (contentType.MetadataProperties.Contains( &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://schemas.microsoft.com/RS/2006:Security" mce_href="http://schemas.microsoft.com/RS/2006:Security"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;http://schemas.microsoft.com/RS/2006:Security&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;) &lt;br&gt;{ &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;MetadataProperty&lt;/span&gt; annotationProperty = contentType.MetadataProperties[ &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://schemas.microsoft.com/RS/2006:Security" mce_href="http://schemas.microsoft.com/RS/2006:Security"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;http://schemas.microsoft.com/RS/2006:Security&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: red;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;];&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;object&lt;/span&gt; annotationValue = annotationProperty.Value; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;//Do something... &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;Notice that the way you access structural annotations is the same as the way you access attribute annotations, i.e. by name/identity, in the MetadataProperties collection. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;This of course means that their names can’t collide, name collisions should be picked up when metadata is loaded from persistent formats (like CSDL) or when annotations are created by hand in the any future mutable metadata API. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style=""&gt;&lt;span style=""&gt;2.1&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal;" times="" new="" roman??=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;MetadataProperty TypeUsage&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;When creating a MetadataProperty to hold the XElement for the structural annotation, we need to assign a TypeUsage too. For V1 style attribute annotations, the &lt;a style=""&gt;TypeUsage we chose was based on Edm.String. Ideally we should use Edm.XML etc, but since this is not currently available, we will use Edm.String in the meantime. We have filled a bug to change this if/when &lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span class="MsoCommentReference"&gt;&lt;span style="font-size: 8pt; line-height: 115%;"&gt;&lt;a href="http://sharepoint/#_msocom_1" language="JavaScript" class="" id="_anchor_1" title="_msoanchor_1" name="_msoanchor_1" mce_href="http://sharepoint/#_msocom_1"&gt;[j1]&lt;/a&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;XML becomes an EDM type. &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="border-style: solid none none; border-color: rgb(51, 51, 153) -moz-use-text-color -moz-use-text-color; border-width: 1pt medium medium; padding: 1pt 0in 0in;"&gt;
&lt;h3&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal;" times="" new="" roman??=""&gt;&lt;b&gt;&lt;font face="Verdana" size="4"&gt;3&lt;/font&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;What is the MetadataProperty.Value?&lt;/h3&gt;&lt;/div&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;The Value of the &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;MetadataProperty&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;will be a &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;XElement&lt;/span&gt; for structural annotations originating from CSDL. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;So if you know that the annotation is a structural annotation you can access it like this: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;MetadataProperty&lt;/span&gt; annotationProperty = &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style=""&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&gt;contentType.MetadataProperties[&lt;span style="color: rgb(163, 21, 21);"&gt;"CLR:Attributes"&lt;/span&gt;]; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;XElement&lt;/span&gt; myAnnotation = annotationProperty.Value &lt;span style="color: blue;"&gt;as&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;XElement&lt;/span&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style=""&gt;&lt;span style=""&gt;3.1&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal;" times="" new="" roman??=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;XElement is rooted at the &amp;lt;Annotation&amp;gt; element&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;The &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;XElement&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;returned will be the &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;XElement&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;containing everything including the structural annotation itself. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style=""&gt;&lt;span style=""&gt;3.2&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal;" times="" new="" roman??=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;XElement is mutable&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;There is nothing to stop the consumer of the Metadata API from modifying the &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;XElement&lt;/span&gt; since it is simply a reference, to an instance of a type the Entity Framework doesn’t control. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;We could address this by cloning on access to make things a little safer. But this negatively affects the mainline scenario, namely where a customer uses annotations purely for read, and is therefore not required. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;The important thing to understand is that should a user modify the &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;XElement&lt;/span&gt; all bets are off. We should provide guidance both via API hints: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: gray;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;///&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: green;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: gray;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;summary&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: gray;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;///&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: green;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; .... &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: gray;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;///&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: green;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: gray;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;remarks&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: gray;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;///&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: green;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; Should this return a reference type like an XElement, you should consider &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: gray;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;///&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: green;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; this immutable, no guarantees are made about behavior if this reference &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: gray;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;///&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: green;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; type is modified in anyway. &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: gray;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;///&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: green;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: gray;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;/remarks&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: gray;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;///&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: green;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: gray;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;/summary&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;public&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;span style="color: blue;"&gt;object&lt;/span&gt; Value { get { &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;And via appropriate documentation. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style=""&gt;&lt;span style=""&gt;3.3&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal;" times="" new="" roman??=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;No universal annotation format&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;Rather than try to invent a new universal data format for annotations, we decided to be pragmatic. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;So we are limiting ourselves to XML for structural annotations loaded from CSDL (an XML format).&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;However since the &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;MetadataProperty&lt;/span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Value &lt;/span&gt;is of type &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;object&lt;/span&gt;, in a world where we have an alternative EDM representation (like in memory using mutable metadata for instance) we could easily assign something other than an &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;XElement&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/span&gt;to the &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; color: rgb(43, 145, 175); line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;MetadataProperty&lt;/span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-size: 10pt; line-height: 115%;" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Value&lt;/span&gt;, like for example a xaml Serializable CLR type instance. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="border-style: solid none none; border-color: rgb(51, 51, 153) -moz-use-text-color -moz-use-text-color; border-width: 1pt medium medium; padding: 1pt 0in 0in;"&gt;
&lt;h3&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;4&lt;a class="" title="_Toc205113861" name="_Toc205113861"&gt;&lt;/a&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal;" times="" new="" roman??=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Out of Scope &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;The current plan is to simply support annotation in the CSDL &amp;amp; SSDL. Meaning annotating MSL is currently out of scope. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;If we uncover meaningful important scenarios for MSL annotations, we will undertake that work separately.&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;Incidentally supporting structural annotations in MSL touches a&amp;nbsp;completely separate code path, and as a result will require roughly the same amount of work. Additionally in order to make undertaking this work meaningful we would first need to expose a public mapping metadata API.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;....&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;As always we are keen to hear any feedback you have on this item.&lt;/p&gt;
&lt;p&gt;Do you think you will find a use for Structured Annotations?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/alexj" mce_href="http://blogs.msdn.com/alexj"&gt;&lt;b&gt;Alex James &lt;/b&gt;&lt;/a&gt;&lt;br&gt;Program Manager, &lt;br&gt;Entity Framework Team&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;This post is part of the transparent design exercise in the Entity Framework Team. To understand how it works and how your feedback will be used please look at &lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;a href="http://blogs.msdn.com/efdesign/archive/2008/06/23/transparency-in-the-design-process.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2008/06/23/transparency-in-the-design-process.aspx"&gt;this post&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;. &lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8853248" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/efdesign/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/EDM/default.aspx">EDM</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Reporting/default.aspx">Reporting</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Evolving+APIs/default.aspx">Evolving APIs</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Metadata/default.aspx">Metadata</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Entity+Framework+4/default.aspx">Entity Framework 4</category></item><item><title>Using Stored Procedures to load structured data.</title><link>http://blogs.msdn.com/efdesign/archive/2008/07/18/using-stored-procedures-to-get-load-structured-data.aspx</link><pubDate>Fri, 18 Jul 2008 20:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8750530</guid><dc:creator>efdesign</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/efdesign/comments/8750530.aspx</comments><wfw:commentRss>http://blogs.msdn.com/efdesign/commentrss.aspx?PostID=8750530</wfw:commentRss><description>&lt;p&gt;V1 of the Entity Framework allows you to use stored procedures in two main ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mapping Create, Update and Delete entity operations to appropriate stored procedures. &lt;/li&gt;
&lt;li&gt;Doing a FunctionImport that allows you to return an enumeration of Entities* &lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Now the thing is, in order to return an enumeration of&amp;nbsp;Entities, you have to map the Entity too.&lt;/p&gt;
&lt;p&gt;Why? &lt;/p&gt;
&lt;p&gt;Well in V1 FunctionImport attaches the returned entities, so you can make and save changes.&lt;/p&gt;
&lt;p&gt;But of course sometimes you don't want that functionality, you just want a structured way of moving information around, so it is a shame to be required to do the mapping too.&lt;/p&gt;
&lt;p&gt;This leaves us two possibilities for V2.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Allowing FunctionImports to return unattached/untracked Entities. &lt;/li&gt;
&lt;li&gt;Allowing FunctionImports to return ComplexTypes. &lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;The ComplexTypes option is the topic of the following one-pager by Asad a Program Manager on the Entity Framework team:&lt;/p&gt;
&lt;h3&gt;Scenario:&lt;/h3&gt;
&lt;h4&gt;Customer Goal:&lt;/h4&gt;
&lt;p&gt;The customer wants to do something like this in their .NET code:&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style="font-size: 10pt; color: blue;" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;public&lt;/span&gt;&lt;span style="font-size: 10pt;" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CustomerInfo&lt;/span&gt; GetCustomerInfo(&lt;span style="color: blue;"&gt;int&lt;/span&gt; Id) &lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;{ &lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;NorthwindEntities &lt;/span&gt;ctx = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;NorthwindEntities&lt;/span&gt;()) &lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{ &lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;CustomerInfo&lt;/span&gt; info = ctx.GetCustomerInfoById(Id).FirstOrDefault(); &lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; info; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} &lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; line-height: 115%;" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Without needing to create mappings&amp;nbsp;etc,&amp;nbsp;as this lowers the&amp;nbsp;level of friction inherent in using stored procedures for queries with the Entity Framework.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NB: today we only support Collection(Type) as the return type of the FunctionImport, which means it results in an Enumeration, hence the call to FirstOrDefault(). A separate work item is required to support returning just one ComplexType (or EntityType) rather than collections.&lt;/p&gt;
&lt;h3&gt;Detailed Scenario walk through:&lt;/h3&gt;
&lt;h4&gt;&lt;span style=""&gt;User defines a Stored Procedure in store:&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Tahoma','sans-serif';"&gt; &lt;/span&gt;&lt;/h4&gt;
&lt;h4&gt;&lt;span style="font-size: 10pt; font-family: 'Tahoma','sans-serif';"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;Create&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;Procedure&lt;/span&gt; GetCustomerInfoById&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style="color: gray;"&gt;( &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@Id &lt;span style="color: blue;"&gt;int &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;) &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;As &lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; first_name &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;As &lt;/span&gt;Firstname&lt;span style="color: gray;"&gt;,&lt;/span&gt; last_name &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;As &lt;/span&gt;Lastname&lt;span style="color: gray;"&gt;,&lt;/span&gt; city &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;As &lt;/span&gt;City&amp;nbsp; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt; CustomerTable &lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; id &lt;span style="color: gray;"&gt;=&lt;/span&gt; @Id&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Tahoma','sans-serif';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;h4&gt;Complex type definition in EDM:&lt;/h4&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style="font-size: 11pt;"&gt;User wants to map the result set from this stored procedure to a Complex type “CustomerData” defined in Entity Data Model as: &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;ComplexType&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;Name&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;span style="color: blue;"&gt;CustomerData&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;Property&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;Name&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;span style="color: blue;"&gt;Firstname&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;String&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;MaxLength&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;50&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;Property&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;Name&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;font color="#0000ff"&gt;Lastname&lt;/font&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;String&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;MaxLength&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;50&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;Property&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;Name&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"C&lt;span style="color: blue;"&gt;ity&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;String&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;MaxLength&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;50&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;ComplexType&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Tahoma','sans-serif';"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;The mapping involves following three steps:&lt;/h3&gt;
&lt;h4&gt;Define import function definition in SSDL:&lt;/h4&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;Function&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;Name&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;span style="color: blue;"&gt;GetCustomerInfoById&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Aggregate&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;false&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;BuiltIn&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;false&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;NiladicFunction&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;span style="color: blue;"&gt;false&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;IsComposable&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;false&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;ParameterTypeSemantics&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;span style="color: blue;"&gt;AllowImplicitConversion&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Schema&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;dbo&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;Parameter&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;Name&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;span style="color: blue;"&gt;Id&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;int&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Mode&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;In&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;Function&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Expose function definition in CSDL schema file&lt;/h4&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: 'Tahoma','sans-serif';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;EntityContainer&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;Name&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;span style="color: blue;"&gt;CustomerEntityContainer&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;FunctionImport&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;Name&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;span style="color: blue;"&gt;GetCustomerInfoById&lt;/span&gt;"&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;ReturnType&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;span style="color: blue;"&gt;Collection(Self.CustomerData)&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;Parameter&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;Name&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;span style="color: blue;"&gt;Id&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Mode&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;In&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Int32&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;FunctionImport&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;EntityContainer&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt; 
&lt;h4&gt;&lt;a class="" title="_Toc201594026" name="_Toc201594026"&gt;&lt;/a&gt;&lt;span style=""&gt;Define mapping (convention based) MSL file:&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;/h4&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal;"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;EntityContainerMapping&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;StorageEntityContainer&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;span style="color: blue;"&gt;StoreContainer&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;CdmEntityContainer&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;span style="color: blue;"&gt;CustomerEntityContainer&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;FunctionImportMapping&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;FunctionImportName&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;span style="color: blue;"&gt;GetCustomerInfoById&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New';"&gt;FunctionName&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;"&lt;span style="color: blue;"&gt;StoreNamespace.GetCustomerInfoById&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt; &lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(163, 21, 21); font-family: 'Courier New';"&gt;EntityContainerMapping&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Tahoma','sans-serif';"&gt; &lt;/span&gt;
&lt;/p&gt;&lt;h3&gt;Design Details:&lt;/h3&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0pt 21.75pt; text-indent: -0.25in; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: 'Tahoma','sans-serif';"&gt;&lt;span style=""&gt;-&lt;span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;Mapping between Complex type and result type is by convention. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0pt 21.75pt; text-indent: -0.25in; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: 'Tahoma','sans-serif';"&gt;&lt;span style=""&gt;-&lt;span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;Explicit property to column name mapping is not supported. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0pt 21.75pt; text-indent: -0.25in; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: 'Tahoma','sans-serif';"&gt;&lt;span style=""&gt;-&lt;span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;The result from the stored procedure has to exactly match the shape and the property names of the complex types. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="margin: 0in 0in 0pt 21.75pt; text-indent: -0.25in; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: 'Tahoma','sans-serif';"&gt;&lt;span style=""&gt;-&lt;span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;In EDM the result is captured in a Complex type therefore no EntitySet definition or mapping is required.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Assumptions/suppositions:&lt;/h3&gt;
&lt;p class="MsoListParagraph" style="margin: 0in 0in 0pt 21.75pt; text-indent: -0.25in; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: 'Tahoma','sans-serif';"&gt;&lt;span style=""&gt;-&lt;span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;A future work item (covered by a separate feature entry) would enable richer mapping capability by allowing column renames. However for now Convention based mapping is the only supported feature.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Looking forward to hearing your feedback.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/alexj" mce_href="http://blogs.msdn.com/alexj"&gt;&lt;b&gt;Alex James&lt;/b&gt;&lt;/a&gt; &lt;br&gt;Program Manager, &lt;br&gt;Entity Framework Team&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;This post is part of the transparent design exercise in the Entity Framework Team. To understand how it works and how your feedback will be used please look at &lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;a href="http://blogs.msdn.com/efdesign/archive/2008/06/23/transparency-in-the-design-process.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2008/06/23/transparency-in-the-design-process.aspx"&gt;this post&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;. &lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;*In V1 it is also possible to do a FunctionImport that returns a scalar value, but this FunctionImport is not available in Object Services, if you want to use it you have to drop down to eSQL in the EntityServices layer.&amp;nbsp; &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8750530" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/efdesign/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/EDM/default.aspx">EDM</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Stored+Procedures/default.aspx">Stored Procedures</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Mapping/default.aspx">Mapping</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Entity+Framework+4/default.aspx">Entity Framework 4</category></item><item><title>Computed Properties One Pager</title><link>http://blogs.msdn.com/efdesign/archive/2008/06/27/computed-properties-one-pager.aspx</link><pubDate>Fri, 27 Jun 2008 21:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8662879</guid><dc:creator>efdesign</dc:creator><slash:comments>17</slash:comments><comments>http://blogs.msdn.com/efdesign/comments/8662879.aspx</comments><wfw:commentRss>http://blogs.msdn.com/efdesign/commentrss.aspx?PostID=8662879</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;UPDATE:&amp;nbsp;this blog post is out of date. Please review &lt;/STRONG&gt;&lt;A href="http://blogs.msdn.com/efdesign/archive/2009/01/13/update-on-computed-properties.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2009/01/13/update-on-computed-properties.aspx"&gt;&lt;STRONG&gt;this&lt;/STRONG&gt;&lt;/A&gt;&lt;STRONG&gt; instead.&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you've been paying attention to what the Entity Framework team has been saying. You will remember hearing us talk about using the Entity Data Model (EDM) as a common way of describing models that can be understood by many different applications. &lt;/P&gt;
&lt;P&gt;As of V1, the Entity Framework supports ad-hoc line of business applications. In the future though we also want to add extra services, such as reporting. To make this work we need to make a number of key extensions both to the EDM and the Entity Framework itself. &lt;/P&gt;
&lt;P&gt;The first of these is Computed Properties.&lt;/P&gt;
&lt;P&gt;The Reporting Model requirement, is the ability to create reports in terms of properties that are not mapped to fields in the database, but are instead computed. &lt;/P&gt;
&lt;P&gt;Supporting this idea is then vital if we imagine a world where Reporting Services works over the EDM.&lt;/P&gt;
&lt;P&gt;Computed Properties however are useful for more than just Reporting scenarios. What follows is the initial one pager (okay more like 5 pages) on the topic:&lt;/P&gt;
&lt;H3&gt;Scenario:&lt;/H3&gt;
&lt;P class=MsoNormal&gt;We want to support Reporting Services (and other customers too) that want to be able to have some properties of the entity be computed in the store. &lt;/P&gt;
&lt;P class=MsoNormal&gt;Examples range from a Person’s Fullname which is simply the Person’s Firstname and Surname concatenated, to more complicated scenarios that use Navigations, and / or completely random eSQL.&lt;/P&gt;
&lt;H3&gt;Scenario Detailed Walkthrough:&lt;/H3&gt;
&lt;P class=MsoNormal&gt;In the EntityType definition a user creates a Computed Property, either with or without the help of tooling:&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;EntityType&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Person&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Key&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;PropertyRef&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;ID&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Key&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;ID&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Int32&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt; &lt;BR&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Firstname&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;MaxLength&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;50&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt; &lt;BR&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Surname&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;MaxLength&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;50&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt; &lt;BR&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Fullname&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;it.Firstname + ‘ ’ + it.Surname &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;CreatedDate&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;DateTime&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ReadOnly&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;True&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;EntityType&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt;&lt;/SPAN&gt; &lt;/P&gt;
&lt;P class=MsoNormal&gt;In this example the “Fullname” property is computed using the eSQL included in the DefiningExpression under the Property.&lt;/P&gt;
&lt;H4&gt;Interesting Points:&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;We re-use the &lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/SPAN&gt;element for calculated properties, the thing that distinguishes computed properties is that the property has a &lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/SPAN&gt;sub element.&lt;/LI&gt;
&lt;LI&gt;Calculated Properties are always read only.&lt;/LI&gt;
&lt;LI&gt;We also want to introduce a ReadOnly attribute to the Property element that can be used to mark non-calculated properties as read only too &lt;FONT size=3&gt;(&lt;I&gt;&lt;SPAN calibri?,?sans-serif??=""&gt;See the CreatedDate property above)&lt;/SPAN&gt;&lt;/I&gt;.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;In the DefiningExpression’s eSQL we add support for a contextual variable, tentatively called “it”, which can be used by programmers to reference properties and navigation properties on the Entity.&lt;/LI&gt;
&lt;LI&gt;While any eSQL can be written in the DefiningExpression, the expect shape of the resulting query must be projectable into the Type specified at the Property level. For example in the above, the Fullname property is of type string, so the DefiningExpression is valid only because its return shape is expected to be a single row with a single string column.&lt;/LI&gt;
&lt;LI&gt;Calculated Properties can’t be referenced in the Key of the Entity.&lt;/LI&gt;
&lt;LI&gt;Can Calculated Properties reference other Calculated Properties in the same Entity? Ideally yes.&lt;/LI&gt;
&lt;LI&gt;Can Calculated Properties reference Calculated Properties in other Entities? Ideally yes.&lt;/LI&gt;
&lt;LI&gt;Invalid eSQL or invalid return type of the expression should ideally result in a Parsing Error at runtime.&lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;Computed Property Return Types:&lt;/H3&gt;
&lt;P class=MsoNormal&gt;The example given so far, is a special case, in that the eSQL in the DefiningExpression only references properties of the current entity. We can therefore deduce that there will be just one row and from the shape of the projection we can deduce there is one string column, hence we can safely assume this eSQL can be materialized into a single string column or property in the reader or object respectively.&lt;/P&gt;
&lt;P class=MsoNormal&gt;However a DefiningExpression can easily produce multiple rows, either by using a NavigationProperty hanging off the current Entity, or by virtue of being a standard query with an undetermined set of results. &lt;/P&gt;
&lt;P class=MsoNormal&gt;This means we need to also look at handing computed properties that return a Collection.&lt;/P&gt;
&lt;P class=MsoNormal&gt;Additionally the eSQL can return more than one column, so the collection may not necessarily be a Collection of scalars. &lt;/P&gt;
&lt;P class=MsoNormal&gt;Ideally then we should support a collection of ComplexTypes, Entities and perhaps even RowTypes.&lt;/P&gt;
&lt;H4&gt;Collections of Scalars:&lt;/H4&gt;
&lt;P class=MsoNormal&gt;An example would be this:&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;EntityType&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Person&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Key&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;PropertyRef&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;ID&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Key&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;ID&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Int32&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Firstname&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;MaxLength&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;50&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Surname&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;MaxLength&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;50&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Fullname&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;it.Firstname + ‘ ’ + it.Surname &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;NavigationProperty&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Friends&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Relationship&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;FriendShip&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;FromRole&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;FriendOf&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ToRole&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Friend&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Acquaintances&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Collection(String)&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black; FONT-SIZE: 10pt" mso-no-proof:="" new?;="" courier="" text1?="" mso-themecolor:="" yes;=""&gt;SELECT VALUE f.Fullname &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;FROM it.Friends AS f &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;EntityType&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;In this example Acquaintances navigates through a navigation property “Friends”, which returns a Set, so the result is a set of the projected Fullnames.&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;Another way of writing the calculated property that hard-codes the target set in the model would be: &lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Acquaintances&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Collection(String)&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black; FONT-SIZE: 10pt" mso-no-proof:="" new?;="" courier="" text1?="" mso-themecolor:="" yes;=""&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;SELECT VALUE f.Fullname &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;FROM [Person] AS P, P.Friends AS F &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black; FONT-SIZE: 10pt" mso-no-proof:="" new?;="" courier="" text1?="" mso-themecolor:="" yes;=""&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;WHERE P.ID = it.ID &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;This approach is not to be recommended because it mixes the Entity structure with the extents or entitysets, which of course won’t work well with &lt;A href="http://blogs.msdn.com/alexj/archive/2008/05/16/mest-what-is-it-and-how-does-it-work.aspx" mce_href="http://blogs.msdn.com/alexj/archive/2008/05/16/mest-what-is-it-and-how-does-it-work.aspx"&gt;MEST&lt;/A&gt;.&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;Incidentally there is an unrelated proposal for RS to extend eSQL to make it possible to express the above in this simplified syntax&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Acquaintances&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Collection(String)&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black; FONT-SIZE: 10pt" mso-no-proof:="" new?;="" courier="" text1?="" mso-themecolor:="" yes;=""&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;SELECT VALUE P.Friends..Fullname &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;FROM [Person] P &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;WHERE P.ID = it.ID &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;Note if in the future ‘..’ notation is supported in eSQL, then it should be a no-op on our end to support this too:&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Acquaintances&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Collection(String)&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black; FONT-SIZE: 10pt" mso-no-proof:="" new?;="" courier="" text1?="" mso-themecolor:="" yes;=""&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;it.Friends..Fullname &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;You can also imagine a query that doesn’t use “it” at all, and is completely hardcoded:&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;TopGuns&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Collection(String)&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black; FONT-SIZE: 10pt" mso-no-proof:="" new?;="" courier="" text1?="" mso-themecolor:="" yes;=""&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;SELECT VALUE f.Fullname &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;FROM [Person] AS P&amp;nbsp; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black; FONT-SIZE: 10pt" mso-no-proof:="" new?;="" courier="" text1?="" mso-themecolor:="" yes;=""&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;WHERE P.Firstname IN {‘Colin’, ‘Kati’} &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;Object Services:&lt;/H4&gt;
&lt;P class=MsoNormal&gt;Computed properties that return a single scalar value are treated the same as normal properties, the only difference is that they are read-only, which probably only means that the ObjectStateManager needs to ignore changes to these properties rather than making them impossible to change altogether by removing the Setter.&lt;/P&gt;
&lt;P class=MsoNormal&gt;For Collections of Scalar types the Property should be a IEnumerable&amp;lt;T&amp;gt;, i.e. in the Acquaintances example above there should be a IEnumerable&amp;lt;String&amp;gt; property called Acquaintances on the entity. Again changes should be ignored.&lt;/P&gt;
&lt;H3&gt;Entities, ComplexTypes and RowTypes:&lt;/H3&gt;
&lt;P class=MsoNormal&gt;The eSQL in the DefiningExpression can easily project multiple columns so we need a way of setting the type of Property accordingly. There are only 3 real options: Entities, ComplexTypes and RowTypes.&lt;/P&gt;
&lt;P class=MsoNormal&gt;In this example we reverse a navigation property as a computed property, and return a collection of Person entities. I.e. the People who have the current person as a friend:&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;FriendOf&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Collection(Person)&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SELECT VALUE p &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;FROM [Person] AS p, p.Friends AS f &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WHERE f.ID = it.ID &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The query itself it unimportant, what is important, is that we are returning a set of Entities. Likewise we could do something similar to return a list of ComplexTypes:&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;FriendsAddresses&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Collection(Address)&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SELECT VALUE f.Address &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;FROM it.Friends f &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;If we use a navigation property that returns a single Entity then you could do something like this too:&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;MaternalGrandmother&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Person&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;it.Mother.Mother &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;Or a single ComplexType:&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;MothersAddress&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Address&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;it.Mother.Address &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;Ideally we should support, both single and Collections of both Entities and ComplexTypes. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;Random projections (i.e. RowTypes) are much more difficult. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;If they can be coerced into a wellknown shape by property name matching then it might be possible to project into ComplexTypes. But if not, then there is no O-Space equivalent of a RowType that is appropriate.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;Random Examples:&lt;/H3&gt;
&lt;P class=MsoNormal&gt;Including an FK in the structure of an Entity:&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;EntityType&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Person&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Key&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;PropertyRef&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;ID&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Key&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;ID&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Int32&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Firstname&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;MaxLength&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;50&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Surname&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;MaxLength&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;50&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;MotherID&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Int32&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;it.Mother.ID &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;DefiningExpression&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Property&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt; &lt;BR&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;NavigationProperty&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;"&lt;SPAN style="COLOR: blue"&gt;Mother&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Relationship&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Mother_Child&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;FromRole&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Child&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ToRole&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;Mother&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21); FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;EntityType&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue; FONT-SIZE: 10pt" yes?="" mso-no-proof:="" new?;="" courier=""&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;Note:&lt;/B&gt; While this is a handy, we should not confuse this with a solution to requirement for collocation of FK data, because as mentioned previously calculated properties are always read-only and we need a read-write solution to the collocation problem, to allow setting the FK in the Entity directly.&lt;/P&gt;
&lt;H3&gt;Why DefiningExpression?&lt;/H3&gt;
&lt;P class=MsoNormal&gt;DefiningExpression is something we will probably use for C-Side Functions (i.e. functions defined in Entity Data Model in the CSDL). So it makes sense to re-use this term, in order to keep the CSDL vocabulary and mental load smaller.&lt;/P&gt;
&lt;P class=MsoNormal&gt;Also today we already have DefiningQuery in the storage model and QueryView in the mapping, so re-using either of those terms could easily lead to confusion.&lt;/P&gt;
&lt;P class=MsoNormal&gt;Also and perhaps most interestingly, if we interpret the eSQL as a expression, then:&lt;/P&gt;
&lt;P class=MsoNormal&gt;1 =&amp;gt; int&lt;/P&gt;
&lt;P class=MsoNormal&gt;Whereas if we interpret as a query:&lt;/P&gt;
&lt;P class=MsoNormal&gt;1 =&amp;gt; Collection(int)&lt;/P&gt;
&lt;P class=MsoNormal&gt;This&amp;nbsp;former has&amp;nbsp;useful semantics because we can call functions in the eSQL fragment and declare that the property has a scalar return type rather than a Collection(scalar) return type.&lt;/P&gt;
&lt;P&gt;...eof...&lt;/P&gt;
&lt;P&gt;I for one would love to hear your thoughts.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/alexj" mce_href="http://blogs.msdn.com/alexj"&gt;&lt;B&gt;Alex James &lt;/B&gt;&lt;/A&gt;&lt;BR&gt;Program Manager, &lt;BR&gt;Entity Framework Team&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;I&gt;This post is part of the transparent design exercise in the Entity Framework Team. To understand how it works and how your feedback will be used please look at &lt;/I&gt;&lt;/B&gt;&lt;B&gt;&lt;I&gt;&lt;A href="http://blogs.msdn.com/efdesign/archive/2008/06/23/transparency-in-the-design-process.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2008/06/23/transparency-in-the-design-process.aspx"&gt;this post&lt;/A&gt;&lt;/I&gt;&lt;/B&gt;&lt;B&gt;&lt;I&gt;. &lt;/I&gt;&lt;/B&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8662879" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/efdesign/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/EDM/default.aspx">EDM</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Reporting/default.aspx">Reporting</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Entity+Framework+4/default.aspx">Entity Framework 4</category></item><item><title>Transparency in the design process</title><link>http://blogs.msdn.com/efdesign/archive/2008/06/23/transparency-in-the-design-process.aspx</link><pubDate>Tue, 24 Jun 2008 02:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8644189</guid><dc:creator>dpblogs</dc:creator><slash:comments>51</slash:comments><comments>http://blogs.msdn.com/efdesign/comments/8644189.aspx</comments><wfw:commentRss>http://blogs.msdn.com/efdesign/commentrss.aspx?PostID=8644189</wfw:commentRss><description>&lt;P&gt;Today marks the first day of engineering for the ADO.NET Entity Framework V2.0. V2 of the product is a combination of a continued investment in our greater data platform vision as well as a focus on new and expanded ORM scenarios. Some of the things that we are trying to do in this release are as follows: 
&lt;UL&gt;
&lt;LI&gt;Persistence Ignorance : We are looking at ways to introduce a full POCO solution for state management and interaction with the ObjectContext.&lt;/LI&gt;
&lt;LI&gt;N-Tier Support : Today we support Data Contract serialization of entities or exposing entities via Astoria, in V2 we would like to expand to a DataSet like experience where one can remote graphs and changes to the graphs across the wire using standard WCF services.&lt;/LI&gt;
&lt;LI&gt;Code-First : We want to enable a convention based, code only experience with EF wherein one may start with classes and opt-in to database generation and deployment. We expect that we would provide attributes and external mapping capabilities for people who wanted something beyond the convention based mapping.&lt;/LI&gt;
&lt;LI&gt;TDD Scenarios: With the introduction of POCO classes some of the TDD scenarios get a lot easier, and we are looking at incorporating some other asks to better fill out the scenario, such as making our ObjectQuery&amp;lt;T&amp;gt; and other generated members of our context and classes virtual.&lt;/LI&gt;
&lt;LI&gt;FK's : Today we support bi-directional relationships, and&amp;nbsp;we are looking at introducing model concepts to facilitate the definition of FK like experiences in the model or in one's POCO classes.&lt;/LI&gt;
&lt;LI&gt;Lazy Loading: Today we support explicit lazy loading (calling .Load), and&amp;nbsp;we are looking at various options around LoadOptions as well as outright implicit lazy loading.&lt;/LI&gt;
&lt;LI&gt;Query Tree Re-Writing: This allows framework develolpers to contextualy, vertically and horizontally filter query results.&lt;/LI&gt;
&lt;LI&gt;...&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;We have been looking at various options to ensure that the design of Entity Framework V2 truly reflects the requirements of the day to day challenges that our developer community faces when building real-world applications and services. We would like to start by being as transparent as possible in the design process. The approach we take will be similar to what you have seen on Astoria Team blog (ADO.NET Data Services), but I wanted to briefly describe how we’ll go about it so you know exactly what you are looking at when reading one of our design-related posts. 
&lt;P&gt;&lt;B&gt;How did we get here?&lt;/B&gt; Version 1 of the ADO.NET Entity Framework is set to ship as a part of Visual Studio 2008 SP1 and&amp;nbsp;the&amp;nbsp;.NET Framework 3.5 SP1. This release&amp;nbsp;has been&amp;nbsp;the result of&amp;nbsp;a number of years of&amp;nbsp;effort. During V1 the team was focused on&amp;nbsp;implementing an initial set of scenarios as well as&amp;nbsp;the groundwork&amp;nbsp;necessary to continue to build out the Entity Framework in future versions. 
&lt;P&gt;&lt;B&gt;Where are we now?&lt;/B&gt; Today marks the first day of engineering for ADO.NET Entity Framework V2.0. What this means in practice is that we have a team with developers, testers, program managers, etc., that we have regular design meetings, and that we have a timeline (or more accurately, that we’re required to have a timeline but of course we’re still working on it :). 
&lt;P&gt;&lt;B&gt;Transparency in the design?&lt;/B&gt; Over the years Microsoft has been opening up the engineering processes incrementally. Long ago there were only betas, and that was the only chance to see and give feedback about a product before it shipped. Then we started to do Community Tech Previews (CTPs). CTPs enabled us to provide bits more often and gather feedback frequently. The goal with increasing the transparency of design is to take this one step further: we would like to enable folks that are interested in Entity Framework version 2 to follow the design topics as we discuss them, and have the opportunity to provide feedback right during the time where we are actively discussing a certain aspect and before we have made a final decision. 
&lt;P&gt;&lt;B&gt;What exactly would we make visible?&lt;/B&gt; In short, our design process. To be more concrete, I’m not talking about some fancy set of specifications. What I mean is that as we go through the detailed design of the various aspects of Entity Framework V2, we would post to this blog a) the meeting notes from our design meetings (the team has a design meeting twice a week, plus a lot of impromptu hallway chats), and b) deeper write-ups of specific design challenges where we’d like folks to understand how we’re approaching a problem and provide a channel for deep, detailed feedback. 
&lt;P&gt;&lt;B&gt;How transparent is transparent?&lt;/B&gt;&amp;nbsp;We want to be completely clear about the scope of the information we are sharing. One of the things we need to learn both from the Microsoft side and from the community side is whether the model works within a practical set of restrictions. We will post as much of our discussions as it is practically possible. However, we have to make sure we don’t compromise the interests of Microsoft as a company. There are certain things that can range from ideas to specific implementation details that we could consider trade secrets, high-value Microsoft intellectual property or something along those lines. It *will* happen that in some cases we will not discuss a topic publicly, either for a certain term (e.g. until a proper IP protection mechanism is in place) or until we ship or ever. This is nothing new, but I haven’t seen folks from large companies discuss this explicitly before, so&amp;nbsp;we wanted to make sure it is clear here. 
&lt;P&gt;&lt;B&gt;About your feedback:&lt;/B&gt; We would love to hear your thoughts, be it comments, suggestions, ideas or anything else. However, in the end we are designing a commercial Microsoft product. So we’ll happily take your feedback but you need to understand that by providing us feedback in any form you are agreeing that we may use it to develop our product, that others may use it in connection with the product and that you will not be compensated for any of these things. We may incorporate ideas or make changes based on the comments you make, or we may make changes to the product that are indirectly influenced by discussions that we have with you and other folks in the community. Again, this is nothing new, but instead of having some fancy statement written in legal lingo&amp;nbsp;we wanted to be upfront about this here in this first post on the topic. Of course our legal folks looked at this, and they were cool enough to understand that the informal nature of the process is what makes it work, and they let us get away with this statement in which I think we clearly delineate what will happen with whatever feedback you send our way. 
&lt;P&gt;We will start posting design notes and challenges soon and tweak the process as we go. &lt;/P&gt;
&lt;P&gt;Tim Mallalieu&lt;BR&gt;Program Manager, Entity Framework&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8644189" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/efdesign/archive/tags/ADO.NET/default.aspx">ADO.NET</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/efdesign/archive/tags/EDM/default.aspx">EDM</category></item></channel></rss>