<?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</title><link>http://blogs.msdn.com/b/efdesign/</link><description>

</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Entity Framework Design Blog Retired</title><link>http://blogs.msdn.com/b/efdesign/archive/2012/06/05/entity-framework-design-blog-retired.aspx</link><pubDate>Tue, 05 Jun 2012 17:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10315368</guid><dc:creator>dpblogs</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=10315368</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2012/06/05/entity-framework-design-blog-retired.aspx#comments</comments><description>&lt;p&gt;Over the last year we&amp;rsquo;ve seen a marked increase in traffic on the &lt;a href="http://blogs.msdn.com/adonet"&gt;ADO.NET blog&lt;/a&gt;, which has encouraged us to use it for all our announcements and discussions. Today we are officially retiring the Entity Framework Design Blog, although we remain committed to the same transparent design process that was its &lt;a href="http://blogs.msdn.com/b/efdesign/archive/2008/06/23/transparency-in-the-design-process.aspx"&gt;original purpose&lt;/a&gt;. Stay tuned to the &lt;a href="http://blogs.msdn.com/adonet"&gt;ADO.NET blog&lt;/a&gt; to learn more about new features and to help us shape the future of Entity Framework.&lt;/p&gt;
&lt;p&gt;Entity Framework Team&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10315368" width="1" height="1"&gt;</description></item><item><title>Enums in the Entity Designer</title><link>http://blogs.msdn.com/b/efdesign/archive/2011/08/12/enums-in-the-entity-designer.aspx</link><pubDate>Fri, 12 Aug 2011 22:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10195349</guid><dc:creator>dpblogs</dc:creator><slash:comments>20</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=10195349</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2011/08/12/enums-in-the-entity-designer.aspx#comments</comments><description>&lt;p&gt;&lt;meta name="Generator" content="Microsoft Word 14 (filtered)" /&gt;&lt;/p&gt;
&lt;div class="WordSection1"&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;One of the most highly-requested features for the Entity Framework is first-class support for Enums, and we are happy to provide support for this feature in the Entity Designer in the June 2011 CTP recently released. If you haven&amp;rsquo;t checked it out already, find the bits here:&lt;/p&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;&lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=26660"&gt;http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=26660&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;&lt;br /&gt;We&amp;rsquo;d like to give you a look at the experience of developing with Enum types in the Entity Designer. If you haven&amp;rsquo;t yet, take a look at what is going on under the hood with Enums in the Entity Framework in the blog post here:&lt;/p&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/b/efdesign/archive/2011/06/29/enumeration-support-in-entity-framework.aspx"&gt;http://blogs.msdn.com/b/efdesign/archive/2011/06/29/enumeration-support-in-entity-framework.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;and you can follow an example of using Enums in the Walkthrough here:&lt;/p&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/b/adonet/archive/2011/06/30/walkthrough-enums-june-ctp.aspx"&gt;http://blogs.msdn.com/b/adonet/archive/2011/06/30/walkthrough-enums-june-ctp.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;While the Walkthrough will take you briefly through the Entity Designer Enums experience, we want to make sure we show what is available. We&amp;rsquo;d also like you to use this as a way to give direct feedback to the Entity Designer team on the user experience of working with Enums. We are already working on improvements to the experience shipped in the CTP, so please let us know what you think!&lt;/p&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Experience&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;Similar to how Complex Types are represented in the Entity Designer, the primary location to work with Enums is via the Model Browser.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/7870.image001.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/7870.image001.jpg" width="306" height="452" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;There are two major points to note about using Enums in your Entity Data Model:&lt;/p&gt;
&lt;p style="text-indent: -0.25in;" class="MsoListParagraphCxSpFirst"&gt;1.&lt;span style="font: 7pt/normal 'Times New Roman'; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Enum Types are not supported as shapes on the Entity Designer diagram surface&lt;/p&gt;
&lt;p style="text-indent: -0.25in;" class="MsoListParagraphCxSpMiddle"&gt;2.&lt;span style="font: 7pt/normal 'Times New Roman'; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Enum Types are not created in your model via Database-First actions&lt;/p&gt;
&lt;p style="text-indent: -0.25in; margin-left: 1in;" class="MsoListParagraphCxSpMiddle"&gt;a.&lt;span style="font: 7pt/normal 'Times New Roman'; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;When you create an EDM from an existing database, Enums are not defined in your model.&lt;/p&gt;
&lt;p style="text-indent: -0.25in; margin-left: 1in;" class="MsoListParagraphCxSpLast"&gt;b.&lt;span style="font: 7pt/normal 'Times New Roman'; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Update Model from Database will preserve your declaration of Enum types, but again, will not detect Enum constructs from your database.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Please let us know your feedback on the importance of these items. For example, how valuable is it to you to be able to convert reference entity types imported from Database-First into enum types?&lt;/p&gt;
&lt;h5&gt;&lt;b&gt;Enum Type Dialog&lt;/b&gt;&lt;/h5&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/2768.image002.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/2768.image002.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;Name:&lt;/b&gt; Name of Enum Type&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;Underlying Type:&lt;/b&gt; Valid underlying types for enum types are Int16, Int32, Int64, Byte, SByte.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;IsFlags:&lt;/b&gt; When checked, denotes that this enum type is used as a bit field, and applies the Flags attribute to the definition of the Enum Type.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;Member Name and Value (optional):&lt;/b&gt; Type or edit the members for the enum type and define optional values. Values must adhere to the underlying type of the enum.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;Errors:&lt;/b&gt; Errors with your Enum Type definition will appear in the dialog in red, accompanied by a tooltip explaining what is invalid. Common errors are:&lt;/p&gt;
&lt;p style="text-indent: -0.25in;" class="MsoListParagraphCxSpFirst"&gt;-&lt;span style="font: 7pt/normal 'Times New Roman'; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Not a valid enum member value: A Value entered that is invalid according to the underlying type&lt;/p&gt;
&lt;p style="text-indent: -0.25in;" class="MsoListParagraphCxSpMiddle"&gt;-&lt;span style="font: 7pt/normal 'Times New Roman'; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Member is duplicated: Multiple Members entered with the same name&lt;/p&gt;
&lt;p style="text-indent: -0.25in;" class="MsoListParagraphCxSpLast"&gt;-&lt;span style="font: 7pt/normal 'Times New Roman'; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Not a valid name for an enum member: A Member name entered with unsupported characters&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Errors must be fixed before the Enum Type can be created or updated. We do have known issues with our error UI that we are fixing as I write! Feedback is more than welcome as to what is most helpful to you in the dialog.&lt;/p&gt;
&lt;h5&gt;&lt;b&gt;Entry Points&lt;/b&gt;&lt;/h5&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;Create new Enum Type and Edit existing Enum Type:&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;i&gt;Context Menu on Enum Types folder or existing Enum node in Model Browser&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/2275.image003.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/2275.image003.jpg" width="372" height="418" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;Convert Property to Enum:&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;i&gt;Context menu on a Property in an Entity Type&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/5342.image004.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/5342.image004.jpg" width="420" height="547" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Converting a property to an Enum type will create a new Enum Type. To use an existing Enum Type for a property, select the property and you will find existing Enum Types available in the Property Window in the Type drop down.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;Use existing Enum Type:&lt;/b&gt;&lt;/p&gt;
&lt;p style="text-indent: 0.5in; margin-bottom: 0pt;" class="MsoNormal"&gt;&lt;i&gt;Type in Property Window&lt;/i&gt;&lt;/p&gt;
&lt;p style="text-indent: 0.5in; margin-bottom: 0pt;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-indent: 0.5in; margin-bottom: 0pt;" class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/1050.image005.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/1050.image005.jpg" width="340" height="524" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-indent: 0.5in; margin-bottom: 0pt;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Feedback&lt;/h2&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;As always, please let us know what is most valuable to you for using Enum Types in the Entity Designer. What would help you further about the existing support in CTP1? What would you need to see for Enum support in the Designer for it to be the most valuable to your development?&lt;/p&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;Feedback is always appreciated!&lt;/p&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;Thank you,&lt;/p&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;Sarah McDevitt&lt;/p&gt;
&lt;p style="margin-bottom: 0pt;" class="MsoNormal"&gt;Program Manager&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10195349" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/ADO-NET/">ADO.NET</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/EDM/">EDM</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Designer/">Designer</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/What_2700_s+New/">What's New</category></item><item><title>Auto-Compiled LINQ Queries (Entity Framework June 2011 CTP)</title><link>http://blogs.msdn.com/b/efdesign/archive/2011/06/30/auto-compiled-linq-queries-entity-framework-june-2011-ctp.aspx</link><pubDate>Thu, 30 Jun 2011 07:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10181773</guid><dc:creator>dpblogs</dc:creator><slash:comments>23</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=10181773</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2011/06/30/auto-compiled-linq-queries-entity-framework-june-2011-ctp.aspx#comments</comments><description>&lt;p&gt;&lt;meta name="ProgId" content="Word.Document" /&gt;&lt;meta name="Generator" content="Microsoft Word 14" /&gt;&lt;meta name="Originator" content="Microsoft Word 14" /&gt;&lt;link rel="File-List" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Auto-Compiled%20Queries%20in%20EF%20June%202011%20CTP_files/filelist.xml" /&gt; &lt;link rel="Edit-Time-Data" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Auto-Compiled%20Queries%20in%20EF%20June%202011%20CTP_files/editdata.mso" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;link rel="themeData" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Auto-Compiled%20Queries%20in%20EF%20June%202011%20CTP_files/themedata.thmx" /&gt; &lt;link rel="colorSchemeMapping" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Auto-Compiled%20Queries%20in%20EF%20June%202011%20CTP_files/colorschememapping.xml" /&gt;&lt;/p&gt;
&lt;div class="WordSection1"&gt;
&lt;p class="MsoNoSpacing"&gt;When you write a LINQ to Entities query today, the Entity Framework walks over the &lt;i style="mso-bidi-font-style: normal;"&gt;expression tree&lt;/i&gt; generated by the C#/VB compiler and translates (or compiles) that into SQL.&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/8814.QueryTranslation.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/8814.QueryTranslation.jpg" width="632" height="106" /&gt;&lt;/a&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;Compiling the expression tree into SQL involves some overhead though, particularly for more complex queries.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;In order to avoid having to pay this performance penalty every time the LINQ query is executed, the &lt;a href="http://msdn.microsoft.com/en-us/library/bb896297.aspx"&gt;&lt;span class="SpellE"&gt;CompiledQuery&lt;/span&gt;&lt;/a&gt; class was introduced.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This allows you to pay the overhead of compilation just once, and gives you back a delegate that points directly at the compiled version of the query in the Entity Framework cache.&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;static&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;readonly&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&lt;/span&gt;&amp;lt;&lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;NorthwindEntities&lt;/span&gt;&lt;/span&gt;, &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;IQueryable&lt;/span&gt;&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;&amp;gt; query =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;CompiledQuery&lt;/span&gt;.Compile&lt;/span&gt;&amp;lt;&lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;NorthwindEntities&lt;/span&gt;&lt;/span&gt;, &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;IQueryable&lt;/span&gt;&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;&lt;span class="GramE"&gt;&amp;gt;(&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;db&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span style="color: blue;"&gt;from&lt;/span&gt; c &lt;span style="color: blue;"&gt;in&lt;/span&gt; &lt;span class="SpellE"&gt;db.Customers&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;where&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;c.Country&lt;/span&gt; == &lt;span style="color: #a31515;"&gt;"USA"&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;select&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;c.CompanyName&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;Each subsequent time you execute the query it&amp;rsquo;s now much faster.&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Auto-Compiled LINQ to Entities Queries&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;The &lt;a href="http://go.microsoft.com/fwlink/?LinkID=219445"&gt;Entity Framework June 2011 CTP&lt;/a&gt; supports a new feature called Auto-Compiled LINQ Queries.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Now every LINQ to Entities query that you execute &lt;b style="mso-bidi-font-weight: normal;"&gt;automatically &lt;/b&gt;gets compiled and placed in EF&amp;rsquo;s query cache.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Each additional time you run the query, EF will find it in its query cache and won&amp;rsquo;t have to go through the whole compilation process again.&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;This also provides a boost to queries issued using &lt;a href="http://msdn.microsoft.com/en-us/library/bb397951.aspx"&gt;WCF Data Services&lt;/a&gt;, as it uses LINQ under the covers.&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;How &lt;span class="GramE"&gt;Does&lt;/span&gt; it Work?&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;The Entity Framework will walk the nodes in the &lt;a href="http://msdn.microsoft.com/en-us/library/bb397951.aspx"&gt;expression tree&lt;/a&gt; and create a hash which becomes the key used to place it in the query cache.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;If it does not find the query in the cache then it will go ahead and compile it and store the compiled query in the cache for subsequent use.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Each subsequent time, the hash will be calculated and find the compiled query in the tree, thus saving the compilation overhead.&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Turning off Query Caching&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;A new property on &lt;span class="SpellE"&gt;ObjectContext.ContextOptions&lt;/span&gt; has been introduced that allows you to control the default behavior of query compilation.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;By default this property is true, but you can set it to false to disable auto-compilation of LINQ queries:&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;db.ContextOptions.DefaultQueryPlanCachingSetting&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Note&lt;/b&gt;: If you&amp;rsquo;re using &lt;span class="SpellE"&gt;DbContext&lt;/span&gt; and need to get the &lt;span class="SpellE"&gt;ObjectContext&lt;/span&gt; instance, just cast to &lt;span class="SpellE"&gt;IObjectContextAdapter&lt;/span&gt;:&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&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: Consolas; font-size: 9.5pt;"&gt;((&lt;span style="color: #2b91af;"&gt;IObjectContextAdapter&lt;/span&gt;&lt;span class="GramE"&gt;)db&lt;/span&gt;).ObjectContext.ContextOptions.DefaultQueryPlanCachingSetting =&lt;/span&gt; &lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;false&lt;/span&gt;&lt;span style="color: black; mso-themecolor: text1;"&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;The value of this property gets propagated to the &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.objectquery.enableplancaching.aspx"&gt;&lt;span class="SpellE"&gt;EnablePlanCaching&lt;/span&gt;&lt;/a&gt; property on each newly-created &lt;span class="SpellE"&gt;ObjectQuery&lt;/span&gt; for the &lt;span class="SpellE"&gt;ObjectContext&lt;/span&gt;.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Note: There is a known limitation in the June 2011 CTP: while &lt;span class="SpellE"&gt;DefaultQueryPlanCachingSetting&lt;/span&gt; is propagated to the &lt;span class="SpellE"&gt;EnablePlanCaching&lt;/span&gt; setting of each new query, the &lt;span class="SpellE"&gt;EnablePlanCaching&lt;/span&gt; setting is not propagated when using LINQ operators.&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Performance Guidance&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;Obviously when it comes to performance there&amp;rsquo;s no one-size-fits-all approach.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;The size/complexity of your application and queries will greatly influence how much of a performance boost your application will get from this.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;It&amp;rsquo;s important to measure your specific application with a good profiler.&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;It is worth noting that using the &lt;span class="SpellE"&gt;CompiledQuery&lt;/span&gt; class is still the fastest approach, as the delegate that you get back does not need to calculate a hash of the expression tree.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Auto-compiled LINQ queries should be almost as fast though, and provide the benefit of not having to manually use the &lt;span class="SpellE"&gt;CompiledQuery&lt;/span&gt; class.&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Feedback&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;We&amp;rsquo;d love to get your feedback on this feature and hear if it&amp;rsquo;s helping in your application.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Please download the CTP today and let us know what you think!&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;Entity Framework Team&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10181773" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/ADO-NET/">ADO.NET</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Caching/">Caching</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Evolving+APIs/">Evolving APIs</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Linq+to+Entities/">Linq to Entities</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/ObjectServices/">ObjectServices</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/What_2700_s+New/">What's New</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Code+First/">Code First</category></item><item><title>Enumeration Support in Entity Framework </title><link>http://blogs.msdn.com/b/efdesign/archive/2011/06/29/enumeration-support-in-entity-framework.aspx</link><pubDate>Thu, 30 Jun 2011 00:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10181665</guid><dc:creator>dpblogs</dc:creator><slash:comments>16</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=10181665</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2011/06/29/enumeration-support-in-entity-framework.aspx#comments</comments><description>&lt;p&gt;&lt;meta name="ProgId" content="Word.Document" /&gt;&lt;meta name="Generator" content="Microsoft Word 14" /&gt;&lt;meta name="Originator" content="Microsoft Word 14" /&gt;&lt;link rel="File-List" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Where%20are%20my%20Enums%20-%20blog%20post%20-%20v7_PK_files/filelist.xml" /&gt; &lt;link rel="Edit-Time-Data" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Where%20are%20my%20Enums%20-%20blog%20post%20-%20v7_PK_files/editdata.mso" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;link rel="dataStoreItem" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Where%20are%20my%20Enums%20-%20blog%20post%20-%20v7_PK_files/item0007.xml" target="Where%20are%20my%20Enums%20-%20blog%20post%20-%20v7_PK_files/props008.xml" /&gt; &lt;link rel="themeData" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Where%20are%20my%20Enums%20-%20blog%20post%20-%20v7_PK_files/themedata.thmx" /&gt; &lt;link rel="colorSchemeMapping" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Where%20are%20my%20Enums%20-%20blog%20post%20-%20v7_PK_files/colorschememapping.xml" /&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;We recently shipped &lt;a href="http://blogs.msdn.com/b/adonet/archive/2011/04/11/ef-4-1-released.aspx"&gt;Entity Framework 4.1&lt;/a&gt;, and it has been exciting to see the reception the new Code First and &lt;span class="SpellE"&gt;DbContext&lt;/span&gt; APIs have been getting in the developer community. What is also exciting is to be able to start talking more about other features we have been working on, like &lt;a href="http://blogs.msdn.com/b/efdesign/archive/2011/01/21/table-valued-function-support.aspx"&gt;table-valued functions&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/b/efdesign/archive/2011/03/09/unique-constraints-in-the-entity-framework.aspx"&gt;unique constraints&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/b/efdesign/archive/2011/05/04/spatial-types-in-the-entity-framework.aspx"&gt;spatial types&lt;/a&gt; support.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;At present, &lt;span class="SpellE"&gt;enums&lt;/span&gt; support is by far the most requested improvement for Entity Framework. We know it because we get asked about it each time we meet with a customer. We also see questions every week in the comments of &lt;a href="http://blogs.msdn.com/b/efdesign/"&gt;our&lt;/a&gt; &lt;a href="http://blogs.msdn.com/b/adonet/"&gt;blogs&lt;/a&gt;, in &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/threads"&gt;our forums&lt;/a&gt;, in tweets like &lt;a href="http://twitter.com/paulstovell/statuses/76900341123252224"&gt;this&lt;/a&gt;, and likewise in our own &lt;a href="http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions"&gt;feedback site&lt;/a&gt;, in which &lt;span class="SpellE"&gt;enums&lt;/span&gt; currently has more than 1,600 votes. That is about 50% more votes than Code First!&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;After having had to explain &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/9a5d5a64-4de8-4685-8896-c5e8f66fda65"&gt;several&lt;/a&gt; &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/7659feab-d348-4367-b2cd-0456b20262fe"&gt;times&lt;/a&gt; why it takes so long for us to add &lt;span class="SpellE"&gt;enums&lt;/span&gt; support to EF, we are happy to say that we plan to do it in the next version after 4.1.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The goal of this blog post is to describe the design decisions we have made so far and to gather your feedback so that we can refine the design and calibrate the direction we have taken.&lt;/p&gt;
&lt;h1 class="WordSection1"&gt;Understanding &lt;span class="SpellE"&gt;Enums&lt;/span&gt; (and why they are so important)&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;Unlike other things we get to work on, enumerations are an existing programming language feature. Our primary goal is to make sure the feature works as seamlessly as possible with the EF in Object/Relational Mapping scenarios.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;At the same time we have to focus on incorporating the concept of &lt;span class="SpellE"&gt;enums&lt;/span&gt; into the core of the metadata system underlying the EF, the Entity Data Model (EDM), in a manner that serves other key pieces of the EDM ecosystem, such as &lt;a href="http://www.odata.org/"&gt;&lt;span class="SpellE"&gt;OData&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/data/bb931106.aspx"&gt;WCF Data Services&lt;/a&gt;.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;In order to achieve these goals we had to first recognize what &lt;span class="SpellE"&gt;enums&lt;/span&gt; are (and what they aren&amp;rsquo;t) from the language design perspective, look at how they are commonly used within the realm of data oriented applications, understand requirement gaps, prioritize scenarios and come up with a design that can satisfy the most important among them.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 class="WordSection1"&gt;A glimpse at enumeration support in the .NET programing languages&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;The design of &lt;span class="SpellE"&gt;enums&lt;/span&gt; support in .NET programming languages like &lt;a href="http://msdn.microsoft.com/en-us/library/cc138362.aspx"&gt;C#&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/8h84wky1(v=VS.100).aspx"&gt;VB&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/dd233216.aspx"&gt;F#&lt;/a&gt; is amazingly simple. Yet from the perspective of modeling a specific domain, &lt;span class="SpellE"&gt;enums&lt;/span&gt; unquestionably provide great expressiveness.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;This becomes apparent when looking at this straightforward example in C#:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;enum&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ShippingMethod&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Express,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Priority,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Ground&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color: #2b91af;"&gt;Flags&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;enum&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;&lt;/span&gt; : &lt;span style="color: blue;"&gt;byte&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Liquid = 1,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Perishable = 2,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Edible = 4&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Package&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;/span&gt; Id { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Description { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ShippingMethod&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;ShippingMethod&lt;/span&gt; { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;&lt;/span&gt;? &lt;span class="SpellE"&gt;ContentType&lt;/span&gt; &lt;span class="GramE"&gt;{ &lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Reference { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;Given this definition of Package, &lt;span class="SpellE"&gt;ShippingMethod&lt;/span&gt; and &lt;span class="SpellE"&gt;ContentType&lt;/span&gt;, the code necessary to change the &lt;span class="SpellE"&gt;ShippingMethod&lt;/span&gt; and &lt;span class="SpellE"&gt;ContentType&lt;/span&gt; of a package can be as simple as this:&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;juiceBox.ShippingMethod&lt;/span&gt; = &lt;span class="SpellE"&gt;ShippingMethod.Ground&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;juiceBox.ContentType&lt;/span&gt; = &lt;span class="SpellE"&gt;ContentType.Liquid&lt;/span&gt; | &lt;span class="SpellE"&gt;ContentType.Perishable&lt;/span&gt; | &lt;span class="SpellE"&gt;ContentType.Edible&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="WordSection1"&gt;Structural definition&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;In C# &lt;span class="SpellE"&gt;enums&lt;/span&gt; can be structurally described like this:&lt;/p&gt;
&lt;div class="WordSection1"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;The type declaration of an &lt;span class="SpellE"&gt;enum&lt;/span&gt; contains the name of the type and a list of zero or more named constants referred to as &lt;span class="SpellE"&gt;enum&lt;/span&gt; members&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Each &lt;span class="SpellE"&gt;enum&lt;/span&gt; type also has an underlying type which is an non-&lt;span class="SpellE"&gt;nullable&lt;/span&gt; integral primitive type (Int32 if not specified in the declaration)&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Each &lt;span class="SpellE"&gt;enum&lt;/span&gt; member consists of a member name and a member value&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;The set of values that an &lt;span class="SpellE"&gt;enum&lt;/span&gt; member can take is the valid range for the underlying type&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;The value of an &lt;span class="SpellE"&gt;enum&lt;/span&gt; member is optional in the type declaration.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;If the value is not specified, it will be zero for the first member and one more than the value of the previous member for subsequent members&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Multiple members with different names can have the same value&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Member names are case sensitive and must be unique within the &lt;span class="SpellE"&gt;enum&lt;/span&gt; type declaration&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Instances of &lt;span class="SpellE"&gt;enum&lt;/span&gt; types present specific characteristics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Any &lt;span class="SpellE"&gt;enum&lt;/span&gt; value can be explicitly casted to its underlying type&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;All possible values of an &lt;span class="SpellE"&gt;enum&lt;/span&gt; type can be obtained by casting any valid value of its underlying type to the &lt;span class="SpellE"&gt;enum&lt;/span&gt; type (i.e. valid &lt;span class="SpellE"&gt;enum&lt;/span&gt; values are not limited to the declared members of the &lt;span class="SpellE"&gt;enum&lt;/span&gt; type)&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;However, casting directly between two different &lt;span class="SpellE"&gt;enum&lt;/span&gt; types is not allowed&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;The default value for any &lt;span class="SpellE"&gt;enum&lt;/span&gt; type is always zero, casted to the &lt;span class="SpellE"&gt;enum&lt;/span&gt; type, even if there is no declared member in the &lt;span class="SpellE"&gt;enum&lt;/span&gt; type with a value of zero&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span class="SpellE"&gt;Enum&lt;/span&gt; instances are equal-comparable and order-comparable against any other instance of the same &lt;span class="SpellE"&gt;enum&lt;/span&gt; type&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The following comparisons are supported for &lt;span class="SpellE"&gt;enums&lt;/span&gt; in C#:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Equality comparison between &lt;span class="SpellE"&gt;enums&lt;/span&gt;: ==&lt;span class="GramE"&gt;, !=&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span class="GramE"&gt;&lt;/span&gt;Order comparison between &lt;span class="SpellE"&gt;enums&lt;/span&gt;: &amp;lt;, &amp;gt;, &amp;lt;=, &amp;gt;=&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The following operators are supported in C# and return an &lt;span class="SpellE"&gt;enum&lt;/span&gt; of the same type:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Simple arithmetic between &lt;span class="SpellE"&gt;enums&lt;/span&gt; and the underlying type: +, -, ++, --, +=, -=&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Bitwise operators between &lt;span class="SpellE"&gt;enums&lt;/span&gt; of the same type: ^, &amp;amp;, |, ~&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The definition of &lt;span class="SpellE"&gt;enums&lt;/span&gt; in VB is very similar to C#, although &lt;span class="SpellE"&gt;enum&lt;/span&gt; types in VB are required to have at least one member, and member names are case insensitive. Operator rules over &lt;span class="SpellE"&gt;enums&lt;/span&gt; are also different in VB: most arithmetic operators can be applied but the result of the operation will be of the underlying type instead of being an enumeration. In fact, only bitwise operations between two &lt;span class="SpellE"&gt;enum&lt;/span&gt; instances will result in another &lt;span class="SpellE"&gt;enum&lt;/span&gt; of the same type.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Independently of the language, the following library methods on &lt;span class="SpellE"&gt;System.Enum&lt;/span&gt; are particularly useful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;HasFlag&lt;/b&gt;&lt;/span&gt;: Used to verify whether an instance of an &lt;span class="SpellE"&gt;enum&lt;/span&gt; type contains a specific value (see more on &lt;span class="SpellE"&gt;enums&lt;/span&gt; that can contain multiple values in the next section).&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Parse and &lt;span class="SpellE"&gt;TryParse&lt;/span&gt;&lt;/b&gt;: Converts a valid string representation to an &lt;span class="SpellE"&gt;enum&lt;/span&gt; instance.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;ToString&lt;/b&gt;&lt;/span&gt;: Converts an instance of an &lt;span class="SpellE"&gt;enum&lt;/span&gt; to a string representation.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;How &lt;span class="SpellE"&gt;enums&lt;/span&gt; are used in practice&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;As simple as &lt;span class="SpellE"&gt;enums&lt;/span&gt; are, there is a lot of richness in how people think about them and how they are used in real world applications. At a high level, the common usages of &lt;span class="SpellE"&gt;enums&lt;/span&gt; are characterized by the following notions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Enum&lt;/b&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt; types in .NET allow grouping a set of named numeric constants associated to the same concepts into a type: &lt;/b&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Like regular constants, &lt;span class="SpellE"&gt;enums&lt;/span&gt; are a much more manageable alternative to sprinkling magic numbers across your code.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;The ability to group sets of related constants and strong typing enable useful design-time services such as &lt;span class="SpellE"&gt;Intellisense&lt;/span&gt; and provide compile-time checks that help keep your code organized.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Enum&lt;/b&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt; types in .NET always have an &amp;ldquo;underlying&amp;rdquo; integer type that determines the range of values that an instance can store:&lt;/b&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;/b&gt;Fundamental aspects of using &lt;span class="SpellE"&gt;enums&lt;/span&gt;, such as the behavior of comparison, default values, arithmetic and bitwise operators depend on this underlying representation.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Although this correlation to integers is fundamental to the design, it is often possible to use &lt;span class="SpellE"&gt;Enums&lt;/span&gt; without paying much attention to it.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;This is all consistent with the design of Enumerations in the &lt;a href="http://msdn.microsoft.com/en-us/library/whbyts4t(v=VS.100).aspx"&gt;C language&lt;/a&gt;, but in .NET &lt;span class="SpellE"&gt;enums&lt;/span&gt; are more type safe (e.g. you cannot assign directly a value of the underlying type to an &lt;span class="SpellE"&gt;enum&lt;/span&gt; variable without casting it explicitly).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;In some cases, a variable of an &lt;span class="SpellE"&gt;enum&lt;/span&gt; type is used to simultaneously store a combination of multiple values:&lt;/b&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;/b&gt;This is implemented by treating the underlying integer representation as a &amp;ldquo;bit field&amp;rdquo;.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;In .NET, it is possible to express the intent of using an &lt;span class="SpellE"&gt;enum&lt;/span&gt; type in this way by adding the &lt;span class="SpellE"&gt;FlagsAttribute&lt;/span&gt; to the declaration of the type, and then by declaring each member to have an integer value that represents a different bit position:&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p style="margin-left: 1in; mso-add-space: auto;" class="MsoListParagraphCxSpMiddle"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p style="text-indent: 0.25in; mso-layout-grid-align: none;" class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;[&lt;span style="color: #2b91af;"&gt;Flags&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 0.25in; mso-layout-grid-align: none;" class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;enum&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;&lt;/span&gt; : &lt;span style="color: blue;"&gt;byte&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 0.25in; mso-layout-grid-align: none;" class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 0.25in; mso-layout-grid-align: none;" class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Liquid = 1,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 0.25in; mso-layout-grid-align: none;" class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Perishable = 2,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 0.25in; mso-layout-grid-align: none;" class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Edible = 4&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 0.25in; mso-layout-grid-align: none;" class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="mso-layout-grid-align: none;" class="MsoListParagraphCxSpMiddle"&gt;Enumerations that can represent multiple values simultaneously are a powerful concept, but the implementation in .NET is extremely simple: the programing languages handle all &lt;span class="SpellE"&gt;enum&lt;/span&gt; types in the same way, e.g. bitwise operators can be applied to &lt;span class="SpellE"&gt;enums&lt;/span&gt; regardless of the presence of &lt;span class="SpellE"&gt;FlagsAttribute&lt;/span&gt; (in fact, the attribute&amp;rsquo;s sole impact in the behavior of the Base Class Library is in the conversion of an &lt;span class="SpellE"&gt;enum&lt;/span&gt; value to a string). In other words, there is no strong contract in using &lt;span class="SpellE"&gt;FlagsAttribute&lt;/span&gt;, and it is up to the developer to use only &lt;span class="SpellE"&gt;enums&lt;/span&gt; that were meant for multi-value in such a way.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
&lt;div style="mso-layout-grid-align: none;" class="MsoListParagraphCxSpMiddle"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Some tend to think of &lt;span class="SpellE"&gt;enums&lt;/span&gt; types as a way to model constrained categorizations, which assumes variables of an &lt;span class="SpellE"&gt;enum&lt;/span&gt; type can be guaranteed to only hold instances of its declared members: &lt;/b&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="mso-layout-grid-align: none;" class="MsoListParagraphCxSpMiddle"&gt;Although &lt;span class="SpellE"&gt;enums&lt;/span&gt; are strongly typed in .NET, there is currently no way in .NET to express the intent to constrain the values to be only of the declared members. In fact, barring WCF serialization, nothing in .NET will constraint the value of an &lt;span class="SpellE"&gt;enum&lt;/span&gt; instance in this way.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="mso-layout-grid-align: none;" class="MsoListParagraphCxSpMiddle"&gt;That said&lt;span class="GramE"&gt;,&lt;/span&gt; this is evidently a very useful thing to do, in particular in cases in which an &lt;span class="SpellE"&gt;enum&lt;/span&gt; is part of a public contract of a service, or in data centered applications, in which these constraints will often be backed by a database constraint.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="mso-layout-grid-align: none;" class="MsoListParagraphCxSpMiddle"&gt;Other languages outside of .NET, such as Java, deviate from the C design of &lt;span class="SpellE"&gt;enums&lt;/span&gt; based on integer underlying types to instead focus on constraining &lt;span class="SpellE"&gt;enums&lt;/span&gt; instances to only store declared values.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h2&gt;Use of &lt;span class="SpellE"&gt;enums&lt;/span&gt; in data oriented applications&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;Without native support for &lt;span class="SpellE"&gt;enums&lt;/span&gt; in the current version of Entity Framework, customers have come up with different ways to achieve similar functionality. The workarounds often require writing lots of additional code, and in the end, the experience is not as seamless as we would like it to be.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Incidentally, a common workaround, which consists of creating additional entity types for each of the types you would like to define as &lt;span class="SpellE"&gt;enums&lt;/span&gt;, can help illustrate the actual role of &lt;span class="SpellE"&gt;enums&lt;/span&gt; in data oriented applications.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Starting with the previous example, we would create additional entity types for &lt;span class="SpellE"&gt;ShippingMethod&lt;/span&gt; and &lt;span class="SpellE"&gt;ContentType&lt;/span&gt;, associating them to Package and then turning the &lt;span class="SpellE"&gt;ShippingMethod&lt;/span&gt; and &lt;span class="SpellE"&gt;ContentTypes&lt;/span&gt; properties into navigation properties:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ShippingMethod&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;/span&gt; Id { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;/span&gt; Id { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ICollection&lt;/span&gt;&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Package&lt;/span&gt;&amp;gt; Packages { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Package&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;/span&gt; Id { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ShippingMethod&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;ShippingMethod&lt;/span&gt; { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ICollection&lt;/span&gt;&lt;/span&gt;&amp;lt;&lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;&lt;/span&gt;&amp;gt; &lt;span class="SpellE"&gt;ContentTypes&lt;/span&gt; { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;Given this definition for Package, &lt;span class="SpellE"&gt;ShippingMethod&lt;/span&gt; and &lt;span class="SpellE"&gt;ContentType&lt;/span&gt;, the code for changing the &lt;span class="SpellE"&gt;ShippingMethod&lt;/span&gt; and &lt;span class="SpellE"&gt;ContentType&lt;/span&gt; of a package would be similar to 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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; ground = &lt;span class="SpellE"&gt;context.ShippingMethods.Single&lt;/span&gt;(c =&amp;gt; &lt;span class="SpellE"&gt;c.Name&lt;/span&gt; == &lt;span style="color: #a31515;"&gt;"Ground"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; liquid = &lt;span class="SpellE"&gt;context.ContentTypes.Single&lt;/span&gt;(c =&amp;gt; &lt;span class="SpellE"&gt;c.Name&lt;/span&gt; == &lt;span style="color: #a31515;"&gt;"Liquid"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; perishable = &lt;span class="SpellE"&gt;context.ContentTypes.Single&lt;/span&gt;(c =&amp;gt; &lt;span class="SpellE"&gt;c.Name&lt;/span&gt; == &lt;span style="color: #a31515;"&gt;"Perishable"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; edible = &lt;span class="SpellE"&gt;context.ContentTypes.Single&lt;/span&gt;(c =&amp;gt; &lt;span class="SpellE"&gt;c.Name&lt;/span&gt; == &lt;span style="color: #a31515;"&gt;"Edible"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;juice.ShippingMethod&lt;/span&gt; = ground;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;juice.ContentTypes.Clear&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;(&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;juice.ContentTypes.Add&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;(&lt;/span&gt;liquid);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;juice.ContentTypes.Add&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;(&lt;/span&gt;perishable);&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;juice.ContentTypes.Add&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;(&lt;/span&gt;edible);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The solution based on entities is conceptually equivalent to one based on &lt;span class="SpellE"&gt;enums&lt;/span&gt;: in both cases, the list of all possible &lt;span class="SpellE"&gt;ShippingMethods&lt;/span&gt; and &lt;span class="SpellE"&gt;ContentTypes&lt;/span&gt; are used as &lt;b style="mso-bidi-font-weight: normal;"&gt;&amp;ldquo;reference data&amp;rdquo;&lt;/b&gt; for Package.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;However, there are noticeable differences:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Additional tables and foreign key constraints need to exist in the database and be mapped to the entities.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;In order to establish an association, you need to first retrieve an instance of the related entity, e.g. by executing a query (this part can be made easier by adding an extra foreign key property to the entity, so you can establish an association by just assigning the value of the corresponding key to it, but the value of the key would likely become a magic number in your code).&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Many-to-many associations are necessary to achieve similar results to &amp;ldquo;flags&amp;rdquo; &lt;span class="SpellE"&gt;enums&lt;/span&gt;, such as &lt;span class="SpellE"&gt;Package.ContentTypes&lt;/span&gt;. Many-to-many associations require twice as many tables and foreign key constraints in the database as regular one-to-many associations.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;While instances of an entity type can have multiple properties, members of an &lt;span class="SpellE"&gt;enum&lt;/span&gt; type are in general constrained to only have a name and a value.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;In general, an application will only be able to reason about &lt;span class="SpellE"&gt;enum&lt;/span&gt; members that existed at compile time. On the other hand, a solution based on entities can more easily evolve after the application has been written and compiled, because all the data exist in the database and can be modified at any time.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;In summary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;The main role of enumeration types in data oriented applications is to serve as simple lookup lists for reference data&lt;/b&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;/b&gt;&lt;span class="SpellE"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Enums&lt;/b&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt; require significantly less ceremony than using Entities &lt;/b&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Because they are hardcoded and are constrained to only have names and values they are less broadly applicable&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;&lt;span class="SpellE"&gt;Enums&lt;/span&gt; support in Entity Framework and Entity Data Model&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;Taking into account the design of Enumerations in the .NET programing languages, the typical usage and the role of &lt;span class="SpellE"&gt;Enums&lt;/span&gt; in data oriented applications we explained above, we have decided to align the structural definition of &lt;span class="SpellE"&gt;Enums&lt;/span&gt; in the Entity Data Model with their definition in C#.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;This means that the declaration of &lt;span class="SpellE"&gt;Enums&lt;/span&gt; in EDM will have the same elements that they have in C#, including the optionally specified underlying type, case sensitive member names, optional values, etc., and that the same rules are used to choose values not specified, e.g. the default underlying type is also Int32 and the implicit value of members is the previous member plus one, starting with zero for the first member.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;This alignment in the design makes satisfying the requirements of O/RM scenarios for our customers much easier to use. It also enables all the richness of &lt;span class="SpellE"&gt;enums&lt;/span&gt; in the language, including such things as support for multi-valued (flags) &lt;span class="SpellE"&gt;enums&lt;/span&gt; in LINQ to Entities queries.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;When it comes to other consumers and producers of the EDM, like &lt;span class="SpellE"&gt;OData&lt;/span&gt;, the fact that other languages might have significantly different definitions of &lt;span class="SpellE"&gt;enums&lt;/span&gt; becomes relevant. In particular, Java 1.5 introduces first-class language support for the &amp;ldquo;&lt;span class="SpellE"&gt;typesafe&lt;/span&gt; &lt;span class="SpellE"&gt;enum&lt;/span&gt; pattern&amp;rdquo; previously used in Java programs to substitute missing support for &lt;span class="SpellE"&gt;enums&lt;/span&gt;. Java &lt;span class="SpellE"&gt;enums&lt;/span&gt; remove the idea of integral underlying types and instead implements &lt;span class="SpellE"&gt;enums&lt;/span&gt; that are completely constrained to the declared members.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;We recognize that there is a going to be a mismatch between the EDM semantics for &lt;span class="SpellE"&gt;enums&lt;/span&gt; and Java, but we believe the mismatch can be mitigated by the specific library implementations.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Requirements for &lt;span class="SpellE"&gt;Enums&lt;/span&gt; support in EF&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;The following is an exhaustive list of the things that we believe developers using EF should be able to do with enumerations:&lt;/p&gt;
&lt;h3&gt;Models, Metadata and Mapping&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;Users creating an Entity Data Model should be able to define &lt;span class="SpellE"&gt;enum&lt;/span&gt; types (optionally specifying their underlying integer type) and their members (optionally specifying member values explicitly).&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The following XML fragment is an example of how the definition of a simple &lt;span class="SpellE"&gt;enum&lt;/span&gt; type looks in &lt;a href="http://msdn.microsoft.com/en-us/library/bb399292.aspx"&gt;CSDL&lt;/a&gt;:&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;EnumType&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;ShippingMethod&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Member&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Express&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Member&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Priority&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Member&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Ground&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;EnumType&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The corresponding &lt;span class="SpellE"&gt;enum&lt;/span&gt; type in C# looks 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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;enum&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ShippingMethod&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Express,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Priority,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Ground&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Notice that the two type definitions above omit underlying type and member values. Since EDM will use the same rules for implicit underlying type and the assignment of unspecified member values as .NET programming languages, the two types above will unambiguously match, i.e. the underlying type for both is a 32 bit integer and the member values are 0, 1 and 2 for Express, Priority and Ground respectively.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Flags &lt;span class="SpellE"&gt;enums&lt;/span&gt;&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;When declaring an &lt;span class="SpellE"&gt;enum&lt;/span&gt; type in EDM, users should also be able to specify the intent to use this type as a &amp;ldquo;flags&amp;rdquo; &lt;span class="SpellE"&gt;enums&lt;/span&gt;:&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;EnumType&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;ContentType&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: red;"&gt;IsFlags&lt;/span&gt;&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Member&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Liquid&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Member&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Perishable&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;2&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Member&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Edible&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;4&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;EnumType&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The only effect of this attribute in the &lt;span class="SpellE"&gt;EnumType&lt;/span&gt; element is to drive code generation to include the &lt;span class="SpellE"&gt;FlagsAttribute&lt;/span&gt; in the &lt;span class="SpellE"&gt;enum&lt;/span&gt; type definition. For instance, this is the equivalent code in C#:&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color: #2b91af;"&gt;Flags&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;enum&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;&lt;/span&gt; : &lt;span style="color: blue;"&gt;byte&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Liquid = 1,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Perishable = 2,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Edible = 4&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span class="SpellE"&gt;Nullable&lt;/span&gt; &lt;span class="SpellE"&gt;enums&lt;/span&gt;&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;Once an &lt;span class="SpellE"&gt;enum&lt;/span&gt; type has been defined, it should be possible to declare &lt;span class="SpellE"&gt;nullable&lt;/span&gt; or non-&lt;span class="SpellE"&gt;nullable&lt;/span&gt; properties of this type in entities or complex types.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Example:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;EntityType&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Package&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Key&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;PropertyRef&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Id&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Key&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Id&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: red;"&gt;Nullable&lt;/span&gt;&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;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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;ShippingMethod&lt;/span&gt;&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 class="SpellE"&gt;&lt;span style="color: blue;"&gt;Model.ShippingMethod&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: red;"&gt;Nullable&lt;/span&gt;&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;ContentType&lt;/span&gt;&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 class="SpellE"&gt;&lt;span style="color: blue;"&gt;Model.ContentType&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: red;"&gt;Nullable&lt;/span&gt;&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;hellip;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;EntityType&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span class="SpellE"&gt;Enums&lt;/span&gt; as keys&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;In addition, properties of &lt;span class="SpellE"&gt;enum&lt;/span&gt; types can participate &lt;span style="line-height: 115%; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt;"&gt;in the definition of&lt;/span&gt; primary keys, unique constraints and foreign keys, as well as take part in concurrency control checks, and have declared default values.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Mapping&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;Properties of &lt;span class="SpellE"&gt;enum&lt;/span&gt; types support all the same mapping scenarios as properties of the underlying type:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;An &lt;span class="SpellE"&gt;enum&lt;/span&gt; property in EDM can be mapped to any of the store integral types supported by EF: Byte, Int16, Int32 and Int64&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Entities with &lt;span class="SpellE"&gt;enum&lt;/span&gt; properties can be mapped using stored procedures and query views&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;For object to conceptual mapping, both attribute-based (most commonly used in &lt;span class="SpellE"&gt;EntityObject&lt;/span&gt; code generated entities) and convention (most commonly used for POCO types) based mapping are available.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;strong&gt;Note&lt;/strong&gt;: We expect that customers will use &lt;span class="SpellE"&gt;enums&lt;/span&gt; in many cases in which previously they would have used entities with reference data. Unlike entities, &lt;span class="SpellE"&gt;enum&lt;/span&gt; types are not mapped to tables in the database. Users are free to have tables and foreign key constraints, or check constraints in the database that enforce &lt;span class="SpellE"&gt;enum&lt;/span&gt; values. However Entity Framework will not reason about these constraints at runtime, so it is up to the user to keep rows in those tables and &lt;span class="SpellE"&gt;enum&lt;/span&gt; members in sync.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;New metadata APIs&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;The metadata API has been updated to be able to reason about &lt;span class="SpellE"&gt;enum&lt;/span&gt; types. The following classes, &lt;span class="SpellE"&gt;EnumType&lt;/span&gt; and &lt;span class="SpellE"&gt;EnumMember&lt;/span&gt; are used to represent &lt;span class="SpellE"&gt;enums&lt;/span&gt; in the EDM layer:&lt;/p&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span class="SpellE"&gt;System.Data.Metadata.Edm.EnumType&lt;/span&gt; class represents an &lt;span class="SpellE"&gt;enum&lt;/span&gt; type&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span class="SpellE"&gt;System.Data.Metadata.Edm.EnumMember&lt;/span&gt; class represents an &lt;span class="SpellE"&gt;enum&lt;/span&gt; member&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;New overloads of &lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;MetadataWorkspace.GetObjectSpaceType&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;(&lt;/span&gt;), &lt;span class="SpellE"&gt;MetadataWorkspace.GetEdmSpaceType&lt;/span&gt;() and &lt;span class="SpellE"&gt;ObjectItemCollection.GetClrType&lt;/span&gt;() have been added that allow navigating the mapping between &lt;span class="SpellE"&gt;enums&lt;/span&gt; the EDM layer and the object layer.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div class="MsoNormal"&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4&gt;Code First APIs&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;Code First&amp;rsquo;s property mapping fluent APIs have been extended to support &lt;span class="SpellE"&gt;enum&lt;/span&gt; types.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Example:&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ShippingContext&lt;/span&gt;&lt;/span&gt; : &lt;span class="SpellE"&gt;DbContext&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;DbSet&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Package&lt;/span&gt;&amp;gt; Packages { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;span class="SpellE"&gt;OnModelCreating&lt;/span&gt;(&lt;span class="SpellE"&gt;DbModelBuilder&lt;/span&gt; &lt;span class="SpellE"&gt;modelBuilder&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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;span class="SpellE"&gt;modelBuilder.Entity&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Package&lt;/span&gt;&lt;span class="GramE"&gt;&amp;gt;(&lt;/span&gt;).Property(p =&amp;gt; &lt;span class="SpellE"&gt;p.ShippingMethod&lt;/span&gt;).&lt;span class="SpellE"&gt;HasColumnName&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"&lt;span class="SpellE"&gt;sm&lt;/span&gt;"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;h3&gt;Query&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;All types of Entity Framework queries (including &lt;span class="SpellE"&gt;EntityClient&lt;/span&gt; queries and object layer queries written in LINQ or Entity SQL) can refer to &lt;span class="SpellE"&gt;enums&lt;/span&gt;. For instance, the following operations are allowed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Projection of &lt;span class="SpellE"&gt;enum&lt;/span&gt; properties, constants and parameters&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Use of &lt;span class="SpellE"&gt;enum&lt;/span&gt; properties, constants and parameters in filtering predicates&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Use of &lt;span class="SpellE"&gt;enums&lt;/span&gt; as parameters and in the return type of Functions&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Use of &lt;span class="SpellE"&gt;enums&lt;/span&gt; as parameters and in the return type of pass-through SQL APIs such as &lt;span class="SpellE"&gt;ExecuteStoreQuery&lt;/span&gt;, &lt;span class="SpellE"&gt;ExecuteStoreCommand&lt;/span&gt;, &lt;span class="SpellE"&gt;SqlQuery&lt;/span&gt;, etc.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Cast explicitly between &lt;span class="SpellE"&gt;enum&lt;/span&gt; instances and the underlying type of the &lt;span class="SpellE"&gt;enum&lt;/span&gt; (or types that support explicit cast from underlying type of the &lt;span class="SpellE"&gt;enum&lt;/span&gt;) in queries&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Use of equality and order comparisons: ==&lt;span class="GramE"&gt;, !&lt;/span&gt;=, &amp;lt;, &amp;gt;, &amp;lt;=, &amp;gt;=&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;Use of arithmetic and bitwise operators in LINQ queries: +, -, ^, &amp;amp;, |, ~ (the exact behavior and result type depends on the .NET language being used)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;strong&gt;Note&lt;/strong&gt;: Increment and decrement operators such as ++, --, += and -= have side effects and therefore cannot be supported in queries.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Example:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;groundPackages&lt;/span&gt; =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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;span class="GramE"&gt;&lt;span style="color: blue;"&gt;from&lt;/span&gt;&lt;/span&gt; p &lt;span style="color: blue;"&gt;in&lt;/span&gt; &lt;span class="SpellE"&gt;context.Packages&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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;span class="GramE"&gt;&lt;span style="color: blue;"&gt;where&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;p.ShippingMethod&lt;/span&gt; == &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ShippingMethod&lt;/span&gt;.Ground&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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;span class="GramE"&gt;&lt;span style="color: blue;"&gt;select&lt;/span&gt;&lt;/span&gt; p;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;h3&gt;Update&lt;/h3&gt;
&lt;p class="MsoNoSpacing"&gt;Entity Framework entities and complex types that contain &lt;span class="SpellE"&gt;enum&lt;/span&gt; properties can be inserted, updated and deleted. In addition, &lt;span class="SpellE"&gt;enum&lt;/span&gt; properties can be store generated and used for concurrency control.&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;Example:&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;juiceBox&lt;/span&gt; = &lt;span class="SpellE"&gt;context.Packages.Where&lt;/span&gt;(p =&amp;gt; &lt;span class="SpellE"&gt;p.Name&lt;/span&gt; == &lt;span style="color: #a31515;"&gt;"Juice box"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;juiceBox.ShippingMethod&lt;/span&gt; = &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ShippingMethod&lt;/span&gt;.Ground&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;juiceBox.ContentType&lt;/span&gt; = &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;.Liquid&lt;/span&gt; | &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;.Perishable&lt;/span&gt; | &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;.Edible&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;context.SaveChanges&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;(&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Designer support&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;The Entity Designer has been extended to support the definition of &lt;span class="SpellE"&gt;enum&lt;/span&gt; types. An upcoming blog post will contain more details about designer support.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;strong&gt;Note&lt;/strong&gt;: Reverse engineering a database into a model (usually called &amp;ldquo;database first&amp;rdquo;) never introduces &lt;span class="SpellE"&gt;enums&lt;/span&gt; into the model automatically. Users need to manually specify which properties represent &lt;span class="SpellE"&gt;enum&lt;/span&gt; types.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Code generation&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;Code &lt;span class="GramE"&gt;generation,&lt;/span&gt; including EdmGen.exe, &lt;span class="SpellE"&gt;EntityObject&lt;/span&gt; template, Self-Tracking Entities template and &lt;span class="SpellE"&gt;DbContext&lt;/span&gt; template have been updated to generate &lt;span class="SpellE"&gt;enum&lt;/span&gt; type definitions and properties of &lt;span class="SpellE"&gt;enum&lt;/span&gt; types.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Limitations&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;There are several features we considered that will not be included in the upcoming release of EF:&lt;/p&gt;
&lt;h3&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;ToString&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;(&lt;/span&gt;) and Parse()/&lt;span class="SpellE"&gt;TryParse&lt;/span&gt;() won&amp;rsquo;t be supported in queries&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;Translation into store queries would require very complex expressions to achieve fidelity with the behavior of these methods in the CLR.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Mapping &lt;span class="SpellE"&gt;Enums&lt;/span&gt; to strings and arbitrary types&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;We consider the general ability to perform property type transformations in the mapping to be an important feature, but it wasn&amp;rsquo;t a priority this time around. Barring type transformations the most natural thing to do for &lt;span class="SpellE"&gt;enums&lt;/span&gt; is to support mapping to integer numeric types.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Using &lt;span class="SpellE"&gt;enum&lt;/span&gt; properties as mapping discriminators is not supported&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;The Entity Framework runtime supports the use of Boolean properties as mapping discriminators, i.e. the value of the property in an entity is used to decide in what table in the store that entity instance should &lt;span class="SpellE"&gt;stored&lt;/span&gt;. We could consider adding the same capability for &lt;span class="SpellE"&gt;enum&lt;/span&gt; properties, but this wasn&amp;rsquo;t a priority in this release.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Feedback requested&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;As always, your opinions on all aspects of this design are welcome. However, there are specific areas in which we are seeking your help in deciding where to take the design. Please, take some time to answer them in the comments.&lt;/p&gt;
&lt;h3&gt;Checked or Strict &lt;span class="SpellE"&gt;enums&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;As we explained before, constraining the value of an &lt;span class="SpellE"&gt;enum&lt;/span&gt; to the declared members is one of the common notions of &lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;enums&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;,&lt;/span&gt; however in .NET we don&amp;rsquo;t provide a way to express this intent. One thing we could consider doing is to enable this in EF:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;When declaring an &lt;span class="SpellE"&gt;enum&lt;/span&gt; property, users should also be able to declare the intent to constrain the values of the property. They could do this using adding a new &amp;ldquo;Checked&amp;rdquo; facet to properties.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Example:&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;EntityType&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Package&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Key&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;PropertyRef&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Id&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Key&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Id&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: red;"&gt;Nullable&lt;/span&gt;&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;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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;ShippingMethod&lt;/span&gt;&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 class="SpellE"&gt;&lt;span style="color: blue;"&gt;Model.ShippingMethod&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: red;"&gt;Nullable&lt;/span&gt;&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;Checked&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;ContentType&lt;/span&gt;&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 class="SpellE"&gt;&lt;span style="color: blue;"&gt;Model.ContentType&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: red;"&gt;Nullable&lt;/span&gt;&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;Checked&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;hellip;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;EntityType&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The only practical effect of the &lt;span class="GramE"&gt;Checked&lt;/span&gt; attribute in the Property element of an &lt;span class="SpellE"&gt;enum&lt;/span&gt; type would be to enable the &lt;span class="SpellE"&gt;DbContext&lt;/span&gt; API to perform data validation in the property. &lt;span class="SpellE"&gt;DbContext&lt;/span&gt; performs data validation automatically by default on &lt;span class="SpellE"&gt;SaveChanges&lt;/span&gt; and can also perform it on demand. For an &lt;span class="SpellE"&gt;enum&lt;/span&gt; property that has this attribute, if the property value does not correspond to a declared member (or to a valid combination if the &lt;span class="SpellE"&gt;enum&lt;/span&gt; type is &amp;ldquo;flags&amp;rdquo;) validation will fail and &lt;span class="SpellE"&gt;SaveChanges&lt;/span&gt; will abort.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The equivalent behavior could be obtained when using Code First by adding a new validation data annotation or using a fluent API.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Example:&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Package&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;/span&gt; Id { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Description { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[Checked]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ShippingMethod&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;ShippingMethod&lt;/span&gt; { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[Checked]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;&lt;/span&gt;? &lt;span class="SpellE"&gt;ContentType&lt;/span&gt; &lt;span class="GramE"&gt;{ &lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Reference { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;strong&gt;Note&lt;/strong&gt;: The data validation feature in &lt;span class="SpellE"&gt;DbContext&lt;/span&gt; is explained in more details &lt;a href="http://blogs.msdn.com/b/adonet/archive/2011/05/27/ef-4-1-validation.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/b/adonet/archive/2010/12/15/ef-feature-ctp5-validation.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Question: &lt;/b&gt;How important is it to validate &lt;span class="SpellE"&gt;enum&lt;/span&gt; values in this way for you? Would you give up any of the other features explained in this post for it?&lt;b style="mso-bidi-font-weight: normal;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span class="SpellE"&gt;HasFlag&lt;/span&gt; support&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;.NET 4.0 introduced this new method in &lt;span class="SpellE"&gt;System.Enum&lt;/span&gt; that makes it possible to detect whether an instance of a &amp;ldquo;flags&amp;rdquo; &lt;span class="SpellE"&gt;enum&lt;/span&gt; contains a value without having to resort to or think about bitwise operators. We could consider adding support for this method on LINQ to Entities.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Example:&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;perishableLiquids&lt;/span&gt; =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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;span class="GramE"&gt;&lt;span style="color: blue;"&gt;from&lt;/span&gt;&lt;/span&gt; p &lt;span style="color: blue;"&gt;in&lt;/span&gt; &lt;span class="SpellE"&gt;context.Packages&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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;span class="GramE"&gt;&lt;span style="color: blue;"&gt;where&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;p.ContentType.HasFlag&lt;/span&gt;(&lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;.Perishable&lt;/span&gt; | &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;.Liquid&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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;span class="GramE"&gt;&lt;span style="color: blue;"&gt;select&lt;/span&gt;&lt;/span&gt; p;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;This is equivalent to:&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;perishableLiquids&lt;/span&gt; =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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;span class="GramE"&gt;&lt;span style="color: blue;"&gt;from&lt;/span&gt;&lt;/span&gt; p &lt;span style="color: blue;"&gt;in&lt;/span&gt; &lt;span class="SpellE"&gt;context.Packages&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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;span class="GramE"&gt;&lt;span style="color: blue;"&gt;where&lt;/span&gt;&lt;/span&gt; &lt;span class="SpellE"&gt;p.ContentType&lt;/span&gt; &amp;amp; (&lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;.Perishable&lt;/span&gt; | &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;.Liquid&lt;/span&gt;) ==&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;.Perishable&lt;/span&gt; | &lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;ContentType&lt;/span&gt;.Liquid&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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;span class="GramE"&gt;&lt;span style="color: blue;"&gt;select&lt;/span&gt;&lt;/span&gt; p;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&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: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Question:&lt;/b&gt; How important is it to be able to use &lt;span class="SpellE"&gt;HasFlag&lt;/span&gt; in LINQ queries for you? Would you give up any of the other features explained in this post for it?&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Options to disable code generation for specific types&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;&lt;span class="SpellE"&gt;Enum&lt;/span&gt; types are primarily a code construct and therefore their existence is commonly independent of an EF model. If you try to use an &lt;span class="SpellE"&gt;enum&lt;/span&gt; type that is already declared with your code-generated entities it can become very difficult because EF code generation will always generate a new &lt;span class="SpellE"&gt;enum&lt;/span&gt; type for the type defined in the EDM model.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;We could consider improving this by defining an annotation that you could easily put on specific types (&lt;span class="SpellE"&gt;enum&lt;/span&gt;, entity or complex type) in your model that would signal EF code generation templates to ignore that type.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Question: &lt;/b&gt;How important is it to you to be able to skip generating specific types from your model? Would you give up any of the other features explained in this post for it?&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Thanks,&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Diego Vega&lt;br /&gt; Program Manager&lt;br /&gt; Entity Framework Team&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10181665" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/ADO-NET/">ADO.NET</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/EDM/">EDM</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Mapping/">Mapping</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Metadata/">Metadata</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Linq+to+Entities/">Linq to Entities</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/What_2700_s+New/">What's New</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Code+First/">Code First</category></item><item><title>Spatial Types in the Entity Designer</title><link>http://blogs.msdn.com/b/efdesign/archive/2011/05/12/spatial-types-in-the-entity-designer.aspx</link><pubDate>Thu, 12 May 2011 17:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10163901</guid><dc:creator>dpblogs</dc:creator><slash:comments>11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=10163901</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2011/05/12/spatial-types-in-the-entity-designer.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/2477.image001.png"&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/0550.image002.jpg"&gt;&lt;/a&gt;One of the highly-anticipated features coming in the next version of Entity Framework is Spatial support. We&amp;rsquo;d like to give you a look at the experience of developing with Spatial types in the Entity Designer. If you haven&amp;rsquo;t already, take a look at what is going on under the hood with Spatial types in the Entity Framework in the blog post &lt;a href="http://blogs.msdn.com/b/efdesign/archive/2011/05/04/spatial-types-in-the-entity-framework.aspx"&gt;here&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;d like to show you what is coming your way for Spatial types in the Entity Designer and of course, let us know what you think and give us feedback on the experience!&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Goals&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;The goals for supporting Spatial types in the Entity Designer align with Entity Framework design goals for Spatial as well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First class support for Spatial types in the Entity Designer&lt;/li&gt;
&lt;li&gt;Model-first and Database-first support through the Entity Designer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Spatial Types&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Geometry&lt;/li&gt;
&lt;li&gt;Geography&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Experience&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Since the Entity Framework adds Spatial types as primitive EDM types, we treat them exactly as you are used to using primitive types in the Entity Designer. &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Add Property to Entity Type &lt;/li&gt;
&lt;li&gt;Set Data Type as Geography through the Property Window&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/5040.image002.jpg"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/5040.image002.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/4532.image004.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/4532.image004.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Restrictions&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Spatial types cannot be used as entity keys, in associations, or as discriminators. We give design-time validation errors if you attempt to use one of those invalid patterns.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Attempt to set property of type Geometry as entity key&lt;/li&gt;
&lt;li&gt;Validation error in Error List&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/6102.image006.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/6102.image006.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-06-61/7776.image003.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Feedback&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;As always, please let us know what is most valuable to you in the Entity Designer for using Spatial data types. Feedback is always appreciated!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thank you,&lt;/p&gt;
&lt;p&gt;Sarah McDevitt&lt;/p&gt;
&lt;p&gt;Program Manager&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10163901" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/ADO-NET/">ADO.NET</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/EDM/">EDM</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Designer/">Designer</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/What_2700_s+New/">What's New</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Spatial/">Spatial</category></item><item><title>Spatial Types in the Entity Framework</title><link>http://blogs.msdn.com/b/efdesign/archive/2011/05/04/spatial-types-in-the-entity-framework.aspx</link><pubDate>Wed, 04 May 2011 21:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10161138</guid><dc:creator>dpblogs</dc:creator><slash:comments>23</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=10161138</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2011/05/04/spatial-types-in-the-entity-framework.aspx#comments</comments><description>&lt;p&gt;
&lt;meta content="text/html; charset=windows-1252" http-equiv="Content-Type" /&gt;
&lt;meta content="Word.Document" name="ProgId" /&gt;
&lt;meta content="Microsoft Word 14" name="Generator" /&gt;
&lt;meta content="Microsoft Word 14" name="Originator" /&gt;
&lt;link href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Spatial%20types%20in%20the%20Entity%20Framework_files/filelist.xml" rel="File-List" /&gt;
&lt;/p&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:DocumentProperties&gt;
  &lt;o:Author&gt;Pedro Ardila&lt;/o:Author&gt;
  &lt;o:Template&gt;Normal&lt;/o:Template&gt;
  &lt;o:LastAuthor&gt;Pedro Ardila&lt;/o:LastAuthor&gt;
  &lt;o:Revision&gt;2&lt;/o:Revision&gt;
  &lt;o:TotalTime&gt;5&lt;/o:TotalTime&gt;
  &lt;o:Created&gt;2011-05-04T21:47:00Z&lt;/o:Created&gt;
  &lt;o:LastSaved&gt;2011-05-04T21:47:00Z&lt;/o:LastSaved&gt;
  &lt;o:Pages&gt;2&lt;/o:Pages&gt;
  &lt;o:Words&gt;1238&lt;/o:Words&gt;
  &lt;o:Characters&gt;7060&lt;/o:Characters&gt;
  &lt;o:Company&gt;Microsoft Corporation&lt;/o:Company&gt;
  &lt;o:Lines&gt;58&lt;/o:Lines&gt;
  &lt;o:Paragraphs&gt;16&lt;/o:Paragraphs&gt;
  &lt;o:CharactersWithSpaces&gt;8282&lt;/o:CharactersWithSpaces&gt;
  &lt;o:Version&gt;14.00&lt;/o:Version&gt;
 &lt;/o:DocumentProperties&gt;
 &lt;o:OfficeDocumentSettings&gt;
  &lt;o:AllowPNG /&gt;
 &lt;/o:OfficeDocumentSettings&gt;
&lt;/xml&gt;&lt;![endif]--&gt;
&lt;p&gt;
&lt;link target="Spatial%20types%20in%20the%20Entity%20Framework_files/props009.xml" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Spatial%20types%20in%20the%20Entity%20Framework_files/item0008.xml" rel="dataStoreItem" /&gt;
&lt;link target="Spatial%20types%20in%20the%20Entity%20Framework_files/props011.xml" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Spatial%20types%20in%20the%20Entity%20Framework_files/item0010.xml" rel="dataStoreItem" /&gt;
&lt;link href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Spatial%20types%20in%20the%20Entity%20Framework_files/themedata.thmx" rel="themeData" /&gt;
&lt;link href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Spatial%20types%20in%20the%20Entity%20Framework_files/colorschememapping.xml" rel="colorSchemeMapping" /&gt;
&lt;/p&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:SpellingState&gt;Clean&lt;/w:SpellingState&gt;
  &lt;w:GrammarState&gt;Clean&lt;/w:GrammarState&gt;
  &lt;w:TrackMoves&gt;false&lt;/w:TrackMoves&gt;
  &lt;w:TrackFormatting /&gt;
  &lt;w:PunctuationKerning /&gt;
  &lt;w:ValidateAgainstSchemas /&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF /&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables /&gt;
   &lt;w:SnapToGridInCell /&gt;
   &lt;w:WrapTextWithPunct /&gt;
   &lt;w:UseAsianBreakRules /&gt;
   &lt;w:DontGrowAutofit /&gt;
   &lt;w:SplitPgBreakAndParaMark /&gt;
   &lt;w:EnableOpenTypeKerning /&gt;
   &lt;w:DontFlipMirrorIndents /&gt;
   &lt;w:OverrideTableStyleHps /&gt;
   &lt;w:UseFELayout /&gt;
  &lt;/w:Compatibility&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math" /&gt;
   &lt;m:brkBin m:val="before" /&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-" /&gt;
   &lt;m:smallFrac m:val="off" /&gt;
   &lt;m:dispDef /&gt;
   &lt;m:lMargin m:val="0" /&gt;
   &lt;m:rMargin m:val="0" /&gt;
   &lt;m:defJc m:val="centerGroup" /&gt;
   &lt;m:wrapIndent m:val="1440" /&gt;
   &lt;m:intLim m:val="subSup" /&gt;
   &lt;m:naryLim m:val="undOvr" /&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal" /&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7" /&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8" /&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9" /&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title" /&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong" /&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid" /&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading" /&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List" /&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid" /&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List" /&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading" /&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List" /&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid" /&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote" /&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title" /&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography" /&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;

&lt;!--[if gte mso 10]&gt;
&lt;mce:style&gt;&lt;! 
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0in 5.4pt 0in 5.4pt;
	mso-para-margin-top:0in;
	mso-para-margin-right:0in;
	mso-para-margin-bottom:10.0pt;
	mso-para-margin-left:0in;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
table.Table
	{mso-style-name:Table;
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-unhide:no;
	border:solid #A5A5A5 1.0pt;
	mso-border-alt:solid #A5A5A5 .5pt;
	mso-padding-alt:2.15pt 5.75pt 2.15pt 5.75pt;
	mso-border-insideh:.5pt solid #A5A5A5;
	mso-border-insidev:.5pt solid #A5A5A5;
	mso-para-margin:0in;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:8.0pt;
	mso-bidi-font-size:10.0pt;
	font-family:"Verdana","sans-serif";
	mso-fareast-font-family:"Times New Roman";
	mso-bidi-font-family:"Times New Roman";}
table.TableFirstRow
	{mso-style-name:Table;
	mso-table-condition:first-row;
	mso-style-unhide:no;
	mso-tstyle-shading:#5C83B4;
	color:white;
	mso-ansi-font-weight:bold;}
--&gt;
&lt;!--[endif] --&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:shapedefaults v:ext="edit" spidmax="1026" /&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:shapelayout v:ext="edit"&gt;
  &lt;o:idmap v:ext="edit" data="1" /&gt;
 &lt;/o:shapelayout&gt;&lt;/xml&gt;&lt;![endif]--&gt;
&lt;div class="WordSection1"&gt;
&lt;p class="MsoNormal"&gt;One of the highly-anticipated features coming in the next
version of Entity Framework is &lt;span class="GramE"&gt;Spatial&lt;/span&gt; support. The
team has been hard at work designing a compelling story for Spatial, and we
would love to get your feedback on it. In this post we will cover:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The basics of SQL Server&amp;rsquo;s&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;spatial support&lt;/li&gt;
&lt;li&gt;Design goals&lt;/li&gt;
&lt;li&gt;Walkthrough of design: CLR types, Metadata, Usage,
WCF Serialization, Limitations&lt;/li&gt;
&lt;li&gt;Questions (we want to hear from you!)&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoNormal"&gt;This entry will not cover the tools experience as we want to
focus on what is happening under the hood.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;
&lt;/span&gt;We will blog about the tools design at a later time. For now, be sure
that we plan on shipping Spatial with Tools support.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; line-height: 115%;"&gt;The Basics
of Spatial&lt;br /&gt;
&lt;/span&gt;&lt;/b&gt;For those of you that are new to Spatial, let&amp;rsquo;s briefly describe
what it&amp;rsquo;s all about: There are two basic spatial types called Geometry and
Geography which allow you to perform geospatial calculations. An example of a
geospatial calculation is figuring out the distance between Seattle and New
York, or calculating the size (i.e. area) of a state, where the state has been
described as a polygon.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Geometry and Geography are a bit different. &lt;b style="mso-bidi-font-weight: normal;"&gt;Geometry&lt;/b&gt; deals with planar data.
Geometry is well documented under the &lt;a href="http://www.opengeospatial.org/standards/sfa"&gt;Open Geospatial Consortium
(OGC) Specification&lt;/a&gt;. &lt;b style="mso-bidi-font-weight: normal;"&gt;Geography&lt;/b&gt;
deals with ellipsoidal data, taking in mind the curvature of the earth when
performing any calculations. SQL introduced spatial support for these two types
in SQL Server 2008. The SQL implementation supports all of the standard
functions outlined in the OGC spec.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Programming Experience
in SQL&lt;br /&gt;
&lt;/b&gt;The query below returns all the stores within half a mile of the address of
a person whose ID is equal to 2. In the where clause we multiply the result of &lt;span class="SpellE"&gt;STDistance&lt;/span&gt; by 0.00062 to convert meters to miles.&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div style="mso-element: para-border-div; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 1.0pt 4.0pt 1.0pt 4.0pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242;"&gt;
&lt;p style="margin-top: 2.9pt; margin-right: 0in; margin-bottom: .0001pt; margin-left: 0in; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt;DECLARE &lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;@&lt;span class="SpellE"&gt;dist&lt;/span&gt; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: green; mso-font-kerning: 12.0pt;"&gt;sys&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;.&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt;geography&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-top: 2.9pt; margin-right: 0in; margin-bottom: .0001pt; margin-left: 0in; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt;SET &lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;@&lt;span class="SpellE"&gt;dist&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;=&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;(&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt;SELECT &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;p&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;.&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt;Address&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-top: 2.9pt; margin-right: 0in; margin-bottom: .0001pt; margin-left: 0in; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt;FROM &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;dbo&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;.&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;People&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt;as&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt; p&lt;/span&gt;&lt;span style="font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-top: 2.9pt; margin-right: 0in; margin-bottom: .0001pt; margin-left: 0in; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt;WHERE &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;p&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;.&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;PersonID&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;=&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt; 2&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-top: 2.9pt; margin-right: 0in; margin-bottom: .0001pt; margin-left: 0in; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;"&gt;&lt;span style="font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0in; margin-bottom: .0001pt; line-height: 120%; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;"&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt; [Store]&lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;.&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;Name]&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;,&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0in; margin-bottom: .0001pt; line-height: 120%; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;"&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[Store]&lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;.&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;Location]&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;.&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;Lat&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;,&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0in; margin-bottom: .0001pt; line-height: 120%; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;"&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[Store]&lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;.&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;Location]&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;.&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;Long&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0in; margin-bottom: .0001pt; line-height: 120%; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;"&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span class="SpellE"&gt;dbo&lt;/span&gt;]&lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;.&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;Stores] &lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt;AS&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt; [Store]&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0in; margin-bottom: .0001pt; line-height: 120%; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;"&gt;&lt;span class="GramE"&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt;WHERE&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;(&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;[Store]&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;.&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;[Location]&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;.&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;STDistance&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;(&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;@&lt;span class="SpellE"&gt;dist&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;))&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;*&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: fuchsia; mso-font-kerning: 12.0pt;"&gt;cast&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;(&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;0.00062 &lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt;as&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: blue; mso-font-kerning: 12.0pt;"&gt;float&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;(&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt;53&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;)))&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: gray; mso-font-kerning: 12.0pt;"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 120%; font-family: Consolas; mso-fareast-font-family: +mn-ea; color: black; mso-font-kerning: 12.0pt;"&gt; .5&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin-top: 12.0pt;" class="MsoNormal"&gt;In the sample below, we change the
person&amp;rsquo;s address to a different coordinate. Note that &lt;span class="SpellE"&gt;STGeomFromText&lt;/span&gt;
takes two parameters: the point, and a Spatial Reference Identifier (SRID). &lt;span class="GramE"&gt;The value of 4326 maps to the WGS 84 which is the standard
coordinate system for the Earth.&lt;/span&gt; &lt;/p&gt;
&lt;div style="mso-element: para-border-div; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 1.0pt 4.0pt 1.0pt 4.0pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242;"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: 'Courier New'; color: blue; mso-no-proof: yes;"&gt;update&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: 'Courier New'; mso-no-proof: yes;"&gt; [dbo]&lt;span style="color: gray;"&gt;.&lt;/span&gt;[People]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: 'Courier New'; color: blue; mso-no-proof: yes;"&gt;set&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: 'Courier New'; mso-no-proof: yes;"&gt; [Address] &lt;span style="color: gray;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;geography&lt;/span&gt;&lt;span style="color: gray;"&gt;::&lt;/span&gt;STGeomFromText&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: red;"&gt;'POINT(-122.206834 57.611421)'&lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;/span&gt;
4326&lt;span style="color: gray;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: 'Courier New'; color: blue; mso-no-proof: yes;"&gt;where&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: 'Courier New'; mso-no-proof: yes;"&gt; [PersonID] &lt;span style="color: gray;"&gt;=&lt;/span&gt; 2&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p class="MsoNormal"&gt;Note that when listing a point, the longitude is listed
before the latitude.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; line-height: 115%;"&gt;Design&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Goals&lt;/b&gt;&lt;br /&gt;
The goals for spatial are the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To provide a first class support for spatial in
EDM&lt;/li&gt;
&lt;li&gt;Rich Programming experience in LINQ and Entity
SQL against Spatial types&lt;/li&gt;
&lt;li&gt;Code-first, Model-first, and Database-first
support&lt;/li&gt;
&lt;li&gt;Tooling (not covered in this blog)&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoNormal"&gt;We have introduced two new primitive EDM Types called &lt;b style="mso-bidi-font-weight: normal;"&gt;Geometry&lt;/b&gt; and &lt;b style="mso-bidi-font-weight: normal;"&gt;Geography&lt;/b&gt;. This allows us to have spatial-typed properties in our
Entities and Complex Types. As with every other primitive type in EDM, Geometry
and Geography will be associated with CLR types. In this case, we have created
two new types named &lt;span class="SpellE"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;DBGeometry&lt;/b&gt;&lt;/span&gt;
and &lt;span class="SpellE"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;DBGeography&lt;/b&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt; &lt;/b&gt;which allows us to provide a
first-class programming experience against these types in LINQ and Entity SQL.&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt;" class="MsoNormal"&gt;One can
describe these types in the &lt;b style="mso-bidi-font-weight: normal;"&gt;CSDL&lt;/b&gt; in
a straightforward fashion:&lt;/p&gt;
&lt;div style="mso-element: para-border-div; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 1.0pt 4.0pt 1.0pt 4.0pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242;"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: #a31515;"&gt;EntityType&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: red;"&gt;Name&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas;"&gt;"&lt;span style="color: blue;"&gt;Store&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: #a31515;"&gt;Key&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: #a31515;"&gt;PropertyRef&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: red;"&gt;Name&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas;"&gt;"&lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;StoreId&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: #a31515;"&gt;Key&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: #a31515;"&gt;Property&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: red;"&gt;Name&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas;"&gt;"&lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;StoreId&lt;/span&gt;&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 class="SpellE"&gt;&lt;span style="color: red;"&gt;Nullable&lt;/span&gt;&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: #a31515;"&gt;Property&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: red;"&gt;Name&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas;"&gt;"&lt;span style="color: blue;"&gt;Name&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 class="SpellE"&gt;&lt;span style="color: red;"&gt;Nullable&lt;/span&gt;&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: #a31515;"&gt;Property&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: red;"&gt;Name&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas;"&gt;"&lt;span style="color: blue;"&gt;Location&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red; background: yellow; mso-highlight: yellow;"&gt;Type&lt;/span&gt;&lt;span style="color: blue; background: yellow; mso-highlight: yellow;"&gt;=&lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;"&lt;span style="color: blue;"&gt;Geometry&lt;/span&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: red;"&gt;Nullable&lt;/span&gt;&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: #a31515;"&gt;EntityType&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin-bottom: .0001pt;" class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt;" class="MsoNormal"&gt;Representing&lt;b style="mso-bidi-font-weight: normal;"&gt; &lt;/b&gt;in&lt;b style="mso-bidi-font-weight: normal;"&gt;
SSDL&lt;/b&gt; is very simple as well:&lt;/p&gt;
&lt;div style="mso-element: para-border-div; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 1.0pt 4.0pt 1.0pt 4.0pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242;"&gt;
&lt;p style="margin-bottom: .0001pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: #a31515;"&gt;EntityType&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: red;"&gt;Name&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas;"&gt;"&lt;span style="color: blue;"&gt;Stores&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: #a31515;"&gt;Key&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: #a31515;"&gt;PropertyRef&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: red;"&gt;Name&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas;"&gt;"&lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;StoreId&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: #a31515;"&gt;Key&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: #a31515;"&gt;Property&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: red;"&gt;Name&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas;"&gt;"&lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;StoreId&lt;/span&gt;&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 class="SpellE"&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;/span&gt;"
&lt;span class="SpellE"&gt;&lt;span style="color: red;"&gt;Nullable&lt;/span&gt;&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: #a31515;"&gt;Property&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: red;"&gt;Name&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas;"&gt;"&lt;span style="color: blue;"&gt;Name&lt;/span&gt;" &lt;span style="color: red;"&gt;Type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;nvarchar&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: red;"&gt;Nullable&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;false&lt;/span&gt;" &lt;span class="SpellE"&gt;&lt;span style="color: red;"&gt;MaxLength&lt;/span&gt;&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: #a31515;"&gt;Property&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: red;"&gt;Name&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas;"&gt;"&lt;span style="color: blue;"&gt;Location&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red; background: yellow; mso-highlight: yellow;"&gt;Type&lt;/span&gt;&lt;span style="color: blue; background: yellow; mso-highlight: yellow;"&gt;=&lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;"&lt;span style="color: blue;"&gt;geometry&lt;/span&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: red;"&gt;Nullable&lt;/span&gt;&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: #a31515;"&gt;EntityType&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin-top: 12.0pt;" class="MsoNormal"&gt;Be aware that spatial types cannot
be used as entity keys, cannot be used in relationships, and cannot be used as
discriminators.&lt;/p&gt;
&lt;p style="margin-top: 12.0pt; margin-right: 0in; margin-bottom: .0001pt; margin-left: 0in;" class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style="margin-top: 12.0pt; margin-right: 0in; margin-bottom: .0001pt; margin-left: 0in;" class="MsoNormal"&gt;&lt;span class="GramE"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Usage&lt;br /&gt;
&lt;/b&gt;Here are&lt;/span&gt; some scenarios and corresponding queries showing how simple
it is to write spatial queries in LINQ:&lt;/p&gt;
&lt;p style="margin-top: 12.0pt; margin-right: 0in; margin-bottom: .0001pt; margin-left: 0in;" class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;table style="border-collapse: collapse; border: none; mso-border-alt: solid #A5A5A5 .5pt; mso-yfti-tbllook: 1184; mso-padding-alt: 2.15pt 5.75pt 2.15pt 5.75pt;" cellpadding="0" cellspacing="0" border="1" class="Table"&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: -1; mso-yfti-firstrow: yes;"&gt;
&lt;td style="width: 136.25pt; border: solid #A5A5A5 1.0pt; mso-border-alt: solid #A5A5A5 .5pt; background: #5C83B4; padding: 2.15pt 5.75pt 2.15pt 5.75pt;" valign="top" width="182"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-yfti-cnfc: 1;" class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-size: 8.0pt; mso-bidi-font-size: 10.0pt; font-family: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; color: white;"&gt;Query Scenario&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="width: 378.55pt; border: solid #A5A5A5 1.0pt; border-left: none; mso-border-left-alt: solid #A5A5A5 .5pt; mso-border-alt: solid #A5A5A5 .5pt; background: #5C83B4; padding: 2.15pt 5.75pt 2.15pt 5.75pt;" valign="top" width="505"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-yfti-cnfc: 1;" class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-size: 8.0pt; mso-bidi-font-size: 10.0pt; font-family: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; color: white;"&gt;Example&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 0;"&gt;
&lt;td style="width: 136.25pt; border: solid #A5A5A5 1.0pt; border-top: none; mso-border-top-alt: solid #A5A5A5 .5pt; mso-border-alt: solid #A5A5A5 .5pt; padding: 2.15pt 5.75pt 2.15pt 5.75pt;" valign="top" width="182"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 8.0pt; mso-bidi-font-size: 10.0pt; font-family: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Simple Select of Entities with Spatial columns&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="width: 378.55pt; border-top: none; border-left: none; border-bottom: solid #A5A5A5 1.0pt; border-right: solid #A5A5A5 1.0pt; mso-border-top-alt: solid #A5A5A5 .5pt; mso-border-left-alt: solid #A5A5A5 .5pt; mso-border-alt: solid #A5A5A5 .5pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; padding: 2.15pt 5.75pt 2.15pt 5.75pt;" valign="top" width="505"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman'; color: #76923c; mso-themecolor: accent3; mso-themeshade: 191;"&gt;// Store is an
  entity type with Location as a Geography type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman'; color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt; stores = &lt;span style="color: blue;"&gt;from&lt;/span&gt;
  s &lt;span style="color: blue;"&gt;in&lt;/span&gt; &lt;span class="SpellE"&gt;db.Stores&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;select&lt;/span&gt;
  s;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 1;"&gt;
&lt;td style="width: 136.25pt; border: solid #A5A5A5 1.0pt; border-top: none; mso-border-top-alt: solid #A5A5A5 .5pt; mso-border-alt: solid #A5A5A5 .5pt; padding: 2.15pt 5.75pt 2.15pt 5.75pt;" valign="top" width="182"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 8.0pt; mso-bidi-font-size: 10.0pt; font-family: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Simple Select of Spatial values&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="width: 378.55pt; border-top: none; border-left: none; border-bottom: solid #A5A5A5 1.0pt; border-right: solid #A5A5A5 1.0pt; mso-border-top-alt: solid #A5A5A5 .5pt; mso-border-left-alt: solid #A5A5A5 .5pt; mso-border-alt: solid #A5A5A5 .5pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; padding: 2.15pt 5.75pt 2.15pt 5.75pt;" valign="top" width="505"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman'; color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt; &lt;span class="SpellE"&gt;storeLocations&lt;/span&gt;
  = &lt;span style="color: blue;"&gt;from&lt;/span&gt; s &lt;span style="color: blue;"&gt;in&lt;/span&gt; &lt;span class="SpellE"&gt;db.Stores&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&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;&lt;span style="color: blue;"&gt;select&lt;/span&gt;
  &lt;span class="SpellE"&gt;s.Location&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 2;"&gt;
&lt;td style="width: 136.25pt; border: solid #A5A5A5 1.0pt; border-top: none; mso-border-top-alt: solid #A5A5A5 .5pt; mso-border-alt: solid #A5A5A5 .5pt; padding: 2.15pt 5.75pt 2.15pt 5.75pt;" valign="top" width="182"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 8.0pt; mso-bidi-font-size: 10.0pt; font-family: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Query with filter, using static constructors&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="width: 378.55pt; border-top: none; border-left: none; border-bottom: solid #A5A5A5 1.0pt; border-right: solid #A5A5A5 1.0pt; mso-border-top-alt: solid #A5A5A5 .5pt; mso-border-left-alt: solid #A5A5A5 .5pt; mso-border-alt: solid #A5A5A5 .5pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; padding: 2.15pt 5.75pt 2.15pt 5.75pt;" valign="top" width="505"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman'; color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt; store = &lt;span style="color: blue;"&gt;from&lt;/span&gt;
  s &lt;span style="color: blue;"&gt;in&lt;/span&gt; &lt;span class="SpellE"&gt;db.Stores&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&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;span style="color: blue;"&gt;where&lt;/span&gt;
  &lt;span class="SpellE"&gt;s.Location&lt;/span&gt; == &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="color: #2b91af;"&gt;DbGeography&lt;/span&gt;.Parse&lt;/span&gt;(&lt;span style="color: red; mso-no-proof: yes;"&gt;&amp;rdquo;POINT(-122.206834 47.611421)&amp;rdquo;&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&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;span style="color: blue;"&gt;select&lt;/span&gt;
  s;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 3;"&gt;
&lt;td style="width: 136.25pt; border: solid #A5A5A5 1.0pt; border-top: none; mso-border-top-alt: solid #A5A5A5 .5pt; mso-border-alt: solid #A5A5A5 .5pt; padding: 2.15pt 5.75pt 2.15pt 5.75pt;" valign="top" width="182"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 8.0pt; mso-bidi-font-size: 10.0pt; font-family: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Query with filter using local variable&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="width: 378.55pt; border-top: none; border-left: none; border-bottom: solid #A5A5A5 1.0pt; border-right: solid #A5A5A5 1.0pt; mso-border-top-alt: solid #A5A5A5 .5pt; mso-border-left-alt: solid #A5A5A5 .5pt; mso-border-alt: solid #A5A5A5 .5pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; padding: 2.15pt 5.75pt 2.15pt 5.75pt;" valign="top" width="505"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman'; color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt; store = &lt;span style="color: blue;"&gt;from&lt;/span&gt;
  s &lt;span style="color: blue;"&gt;in&lt;/span&gt; &lt;span class="SpellE"&gt;db.Stores&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&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;span style="color: blue;"&gt;where&lt;/span&gt;
  &lt;span class="SpellE"&gt;s.Location&lt;/span&gt; == &lt;span class="SpellE"&gt;loc&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&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;span style="color: blue;"&gt;select&lt;/span&gt;
  s;&lt;span style="color: #2b91af;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 4;"&gt;
&lt;td style="width: 136.25pt; border: solid #A5A5A5 1.0pt; border-top: none; mso-border-top-alt: solid #A5A5A5 .5pt; mso-border-alt: solid #A5A5A5 .5pt; padding: 2.15pt 5.75pt 2.15pt 5.75pt;" valign="top" width="182"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 8.0pt; mso-bidi-font-size: 10.0pt; font-family: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Query involving Spatial methods&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="width: 378.55pt; border-top: none; border-left: none; border-bottom: solid #A5A5A5 1.0pt; border-right: solid #A5A5A5 1.0pt; mso-border-top-alt: solid #A5A5A5 .5pt; mso-border-left-alt: solid #A5A5A5 .5pt; mso-border-alt: solid #A5A5A5 .5pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; padding: 2.15pt 5.75pt 2.15pt 5.75pt;" valign="top" width="505"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman'; color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt; distances = &lt;span style="color: blue;"&gt;from&lt;/span&gt; s &lt;span style="color: blue;"&gt;in&lt;/span&gt; &lt;span class="SpellE"&gt;db.Stores&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;select&lt;/span&gt;
  &lt;span class="SpellE"&gt;s.Location.Distance&lt;/span&gt;(&lt;span class="SpellE"&gt;anotherLocation&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow: 5; mso-yfti-lastrow: yes;"&gt;
&lt;td style="width: 136.25pt; border: solid #A5A5A5 1.0pt; border-top: none; mso-border-top-alt: solid #A5A5A5 .5pt; mso-border-alt: solid #A5A5A5 .5pt; padding: 2.15pt 5.75pt 2.15pt 5.75pt;" valign="top" width="182"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 8.0pt; mso-bidi-font-size: 10.0pt; font-family: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;Find all the stores within a mile of a given address&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="width: 378.55pt; border-top: none; border-left: none; border-bottom: solid #A5A5A5 1.0pt; border-right: solid #A5A5A5 1.0pt; mso-border-top-alt: solid #A5A5A5 .5pt; mso-border-left-alt: solid #A5A5A5 .5pt; mso-border-alt: solid #A5A5A5 .5pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; padding: 2.15pt 5.75pt 2.15pt 5.75pt;" valign="top" width="505"&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman'; color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt; person = &lt;span class="SpellE"&gt;db.People.Single&lt;/span&gt;(p
  =&amp;gt; &lt;span class="SpellE"&gt;p.PersonID&lt;/span&gt; == 2);&lt;span style="mso-spacerun: yes;"&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;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman'; color: blue;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt; stores = &lt;span style="color: blue;"&gt;from&lt;/span&gt;
  s &lt;span style="color: blue;"&gt;in&lt;/span&gt; &lt;span class="SpellE"&gt;db.Stores&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;where&lt;/span&gt;
  &lt;span class="SpellE"&gt;s.Location.Distance&lt;/span&gt;(&lt;span class="SpellE"&gt;person.Address&lt;/span&gt;)
  *&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;.00062 &amp;lt;= 1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;select&lt;/span&gt;
  &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Location&lt;/span&gt;
  &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&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; &lt;/span&gt;{ &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Name = &lt;span class="SpellE"&gt;s.Name&lt;/span&gt;, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Latitude = &lt;span class="SpellE"&gt;s.Location.Latitude&lt;/span&gt;, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Longitude = &lt;span class="SpellE"&gt;s.Location.Longitude&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;" class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="mso-spacerun: yes;"&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; &lt;/span&gt;};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="margin-top: 12.0pt; margin-right: 0in; margin-bottom: .0001pt; margin-left: 0in;" class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p style="margin-top: 12.0pt; margin-right: 0in; margin-bottom: .0001pt; margin-left: 0in;" class="MsoNormal"&gt;Have in mind that spatial types are &lt;b style="mso-bidi-font-weight: normal;"&gt;immutable&lt;/b&gt;, so they can&amp;rsquo;t be modified after
creation. Here is how to create a new location of type &lt;span class="SpellE"&gt;DbGeography&lt;/span&gt;:
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div style="mso-element: para-border-div; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 1.0pt 4.0pt 1.0pt 4.0pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242;"&gt;
&lt;p style="margin-bottom: .0001pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas;"&gt;s.Location&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas;"&gt; = &lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;span style="color: #2b91af;"&gt;DbGeography&lt;/span&gt;.Parse&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;(&lt;/span&gt;&lt;span style="color: #a31515;"&gt;"POINT(-122.206834
47.611421)"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: .0001pt; background: #F2F2F2; mso-background-themecolor: background1; mso-background-themeshade: 242; mso-layout-grid-align: none; text-autospace: none; border: none; mso-border-alt: solid windowtext .5pt; padding: 0in; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas;"&gt;db.SaveChanges&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas;"&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;span style="font-family: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; color: windowtext; mso-bidi-font-weight: normal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"&gt;Spatial
Functions&lt;span style="mso-bidi-font-weight: bold;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Our Spatial implementation relies on the underlying database
implementation of any of the spatial functions such as Distance, Intersects,
and others. To make this work, we have created the most common functions as
canonical functions on EDM. As a result, Entity Framework will defer the
execution of the function to the server.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Client-side Behavior&lt;br /&gt;
&lt;/b&gt;&lt;span class="SpellE"&gt;DbGeometry&lt;/span&gt; and &lt;span class="SpellE"&gt;DbGeography&lt;/span&gt;
internally use one of two implementations of &lt;span class="SpellE"&gt;DbSpatialServices&lt;/span&gt;
for client side behavior which we will make available:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;One implementation relies on &lt;span class="SpellE"&gt;Microsoft.SQLServer.Types.SQLGeography&lt;/span&gt;
and &lt;span class="SpellE"&gt;Microsoft.SQLServer.Types.SQLGeometry&lt;/span&gt; being
available to the client. If these two namespaces are available, then we
delegate all spatial operations down to the SQL assemblies. Note that this
implementation introduces a dependency.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Another implementation provides limited services such as
serialization and deserialization, but does not allow performing non-trivial
spatial operations. We create these whenever you explicitly create a spatial
value or &lt;span class="SpellE"&gt;deserialize&lt;/span&gt; one from a web service.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-weight: bold;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"&gt;DataContract&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"&gt; Serialization&lt;span style="mso-bidi-font-weight: bold;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Our implementation provides a simple wrapper that is &lt;span class="SpellE"&gt;serializable&lt;/span&gt;, which allows spatial types to be used in
multi-tier applications. To provide maximum interoperability, we have created a
class called &lt;span class="SpellE"&gt;DbWellKnownSpatialValue&lt;/span&gt; which contains
the SRID, &lt;span class="SpellE"&gt;WellKnownText&lt;/span&gt; (WKT), and &lt;span class="SpellE"&gt;WellKnownBinary&lt;/span&gt; (WKB) values. We will serialize SRID, WKT
and WKB.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; line-height: 115%;"&gt;Questions&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;We want to hear from you. As we work through this design, it
is vital to hear what you think about our decisions, and that you chime in with
your own ideas. Here are a few questions, please take some time to answer them
in the comments:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In order to have client-side spatial functionality,
EF relies on a spatial implementation supplied by the provider. As a default,
EF uses the SQL Spatial implementation. Do you foresee this being a problematic
for Hosted applications which may or may not have access to a spatial
implementation?&lt;/li&gt;
&lt;li&gt;Do you feel as though you will need richer
capabilities on the client side?&lt;/li&gt;
&lt;li&gt;In addition to Geometry and Geography types, do
you need to have constrained types like Point, Polygon?&lt;/li&gt;
&lt;li&gt;Do you foresee using heterogeneous columns of
spatial values in your application?&lt;/li&gt;
&lt;/ol&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Spatial data is ubiquitous now thanks to the widespread use
of GPS-enabled mobile devices. We are very excited about bringing spatial type
support to the Entity Framework. We encourage you to leave your thoughts on
this design below.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Cheers&lt;span class="GramE"&gt;,&lt;/span&gt;&lt;br /&gt;
Pedro Ardila&lt;br /&gt;
Program Manager &amp;ndash; Entity Framework Team&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10161138" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/ADO-NET/">ADO.NET</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Linq+to+Entities/">Linq to Entities</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/What_2700_s+New/">What's New</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Spatial/">Spatial</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity/">Entity</category></item><item><title>Unique Constraints in the Entity Framework</title><link>http://blogs.msdn.com/b/efdesign/archive/2011/03/09/unique-constraints-in-the-entity-framework.aspx</link><pubDate>Thu, 10 Mar 2011 01:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10139012</guid><dc:creator>dpblogs</dc:creator><slash:comments>27</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=10139012</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2011/03/09/unique-constraints-in-the-entity-framework.aspx#comments</comments><description>&lt;p style="margin: 24pt 0in 0pt;"&gt;&lt;span style="color: #000000;"&gt;&lt;strong&gt;&lt;span style="font-family: Cambria;"&gt;Update: this feature has been postponed and&amp;nbsp;will not be included in Entity Framework 5.&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0in 0pt;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Cambria;"&gt;Unique Constraints in the Entity Framework&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;We&amp;rsquo;ve been busy working on enabling unique constraints in the Entity Framework. Unique Constraints allow you to model candidate keys (also known as alternate keys, or natural keys). This post covers the design of the feature so that we can get some early thoughts and opinions on what you&amp;rsquo;d like to see in this feature.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Note:&lt;/b&gt; Tooling and the design time experience is an essential part of any Entity Framework feature that we do. However, the motivation of the Design blog is to take a look under the hood of the features as we build them, and therefore we cover XML metadata and code as opposed to what the design time experience will look like. We will have subsequent posts that cover the designer experience.&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;Background&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Being able to model and use Unique Constraints is one of the top requests we hear from the community using Entity Framework. Like a primary key, a unique constraint is a set of properties on an entity whose values identify the entity as unique. Examples of unique constraints might be Social Security Number, Employee Number, Serial Number, etc. Unique constraints are often used to represent a natural and meaningful key, when a generated key is used as a primary key.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Most databases support unique constraints today.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;F&lt;span style="mso-fareast-language: FR;"&gt;oreign key constraints can generally be based on any unique constraint (as opposed to only on the Primary Key) on the principal side.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;A key difference between a unique constraint and an entity key is that null values are allowed in columns that participate in the unique constraint.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Consider the following example. Here, I have an Employee entity type which includes an &lt;b style="mso-bidi-font-weight: normal;"&gt;EmployeeId&lt;/b&gt;, as well as a Name and a Social Security Number. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;img border="0" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/7870.Employee.jpg" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The &lt;i style="mso-bidi-font-style: normal;"&gt;EmployeeId&lt;/i&gt; is the entity key, and it serves the purpose of uniquely identifying each Employee entity. However, I also have a &lt;i style="mso-bidi-font-style: normal;"&gt;SocialSecurityNumber&lt;/i&gt; property that can be used to uniquely identify the entity. This is a unique constriant, and today in the Entity Framework there is no way to specify that this is unique field.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;This requirement itself is actually pretty self-explanatory, and we might as well say that what&amp;rsquo;s needed is a way to represent this &amp;ldquo;uniqueness&amp;rdquo; in the metadata that describes the entity data model. However, the fact that you can make assumptions about the uniqueness of a given property allows you to take advantage of that fact in interesting ways. For example, DDL generation could leverage this information to generate the corrsponding database constructs .&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;br /&gt;Taking this example further, let&amp;rsquo;s say I have the following entity data model.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;img border="0" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/6888.TaxWitholding.jpg" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;In this case, I now have a few associations that are based on the EmployeeId. What I might actually want in this case is to build one of the associations using &lt;i style="mso-bidi-font-style: normal;"&gt;EmployeeId&lt;/i&gt; as the foreign key, but build the other association using the &lt;i style="mso-bidi-font-style: normal;"&gt;SocialSecurityNumber&lt;/i&gt; as the foreign key value &amp;ndash; i.e. in this particular example, it might make sense to build my data model like this instead:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;img border="0" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/8032.TaxWitholdingSSN.jpg" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;br /&gt;So what I&amp;rsquo;ve done here is that I&amp;rsquo;ve used the unique constriant on &lt;i style="mso-bidi-font-style: normal;"&gt;SocialSecurityNumber &lt;/i&gt;as the basis for the association between TaxWithholding and Employee. In this particular case, the &lt;i style="mso-bidi-font-style: normal;"&gt;SocialSecurityNumber&lt;/i&gt; property seems to be more appropriate and pertinent information defining the TaxWitholding entity type. It is also the perfect for acting as a &amp;ldquo;foreign key&amp;rdquo; to the parent Employee. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;Because I have a first class association based on this constraint, I am also able to take advantage of the richness in the conceptual model &amp;ndash; like being able to navigate the association using a Navigation Property.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;Unique Constraints in the Model&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Let&amp;rsquo;s take a look at CSDL metadata for Employee and TaxWithholding types, and the association between them:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;EntityType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Employee&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Key&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;PropertyRef&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;EmployeeId&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Key&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: #a31515; font-size: 9.5pt; mso-highlight: yellow;"&gt;UniqueConstraint&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: red; font-size: 9.5pt; mso-highlight: yellow;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; font-size: 9.5pt; mso-highlight: yellow;"&gt;"&lt;span style="color: blue;"&gt;SocialSecurityNumber&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: #a31515; font-size: 9.5pt; mso-highlight: yellow;"&gt;PropertyRef&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: red; font-size: 9.5pt; mso-highlight: yellow;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; font-size: 9.5pt; mso-highlight: yellow;"&gt;"&lt;span style="color: blue;"&gt;SocialSecurityNumber&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;PropertyRef&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: #a31515; font-size: 9.5pt; mso-highlight: yellow;"&gt;UniqueConstraint&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Type&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Int32&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;EmployeeId&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Type&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&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;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Name&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: #a31515; font-size: 9.5pt; mso-highlight: yellow;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: red; font-size: 9.5pt; mso-highlight: yellow;"&gt;Type&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; font-size: 9.5pt; mso-highlight: yellow;"&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;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;SocialSecurityNumber&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;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;NavigationProperty&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;EmployeeDetail&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Relationship&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;UniqueModel.EmployeeEmployeeDetail&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;FromRole&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Employee&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;EmployeeDetail&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;NavigationProperty&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;TaxWithholding&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Relationship&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;UniqueModel.EmployeeTaxWithholding&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;FromRole&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Employee&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;TaxWithholding&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;EntityType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;EntityType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;TaxWithholding&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;span style="mso-tab-count: 1;"&gt; &lt;/span&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Key&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;PropertyRef&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;SocialSecurityNumber&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Key&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Type&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Int32&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;SocialSecurityNumber&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Type&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Int32&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;NumberOfDependents&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;NavigationProperty&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Employee&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Relationship&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;UniqueModel.EmployeeTaxWithholding&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;FromRole&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;TaxWithholding&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;Employee&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;EntityType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Association&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"FK_&lt;span style="color: blue;"&gt;Employee_TaxWithholding&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;End&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Type&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Model.Employee&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Role&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Employee&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Multiplicity&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;1&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;End&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Type&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Model.TaxWithholding&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Role&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;TaxWithholding&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Multiplicity&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;0..1&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ReferentialConstraint&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: #a31515; font-size: 9.5pt; mso-highlight: yellow;"&gt;Principal&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: red; font-size: 9.5pt; mso-highlight: yellow;"&gt;Role&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; font-size: 9.5pt; mso-highlight: yellow;"&gt;"&lt;span style="color: blue;"&gt;Employee&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: #a31515; font-size: 9.5pt; mso-highlight: yellow;"&gt;PropertyRef&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: red; font-size: 9.5pt; mso-highlight: yellow;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; font-size: 9.5pt; mso-highlight: yellow;"&gt;"&lt;span style="color: blue;"&gt;SocialSecurityNumber&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: #a31515; font-size: 9.5pt; mso-highlight: yellow;"&gt;Principal&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Dependent&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Role&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;TaxWithholding&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;PropertyRef&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;SocialSecurityNumber&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Dependent&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ReferentialConstraint&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Association&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Foreign Key Associations may be based on a Unique Constraint on the principal end. The ReferentialConstraint element above shows exactly this scenario.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;In order to represent unique constraints as they are defined in the store / database, Store Metadata (SSDL) also includes the ability to specify unique constraints as they are defined on the database schema. Here&amp;rsquo;s the corresponding SSDL for the above example: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;EntityType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Employees&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Key&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;PropertyRef&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;EmployeeId&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Key&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; color: blue; mso-highlight: yellow;"&gt;&amp;lt;UniqueConstraint Name=&amp;ldquo;SocialSecurityNumber&lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; background: yellow; color: #a31515; font-size: 9.5pt; mso-highlight: yellow;"&gt;PropertyRef&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt; &lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; background: yellow; color: red; font-size: 9.5pt; mso-highlight: yellow;"&gt;Name&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt;=&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; background: yellow; font-size: 9.5pt; mso-highlight: yellow;"&gt;"&lt;span style="color: blue;"&gt;SocialSecurityNumber&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;&amp;lt;/UniqueConstraint&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;EmployeeId&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Name&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;nvarchar(max)&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: #a31515; font-size: 9.5pt; mso-highlight: yellow;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: red; font-size: 9.5pt; mso-highlight: yellow;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; font-size: 9.5pt; mso-highlight: yellow;"&gt;"&lt;span style="color: blue;"&gt;SocialSecurityNumber&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;nvarchar(max)&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;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;EntityType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;EntityType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;TaxWithholdings&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Key&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;PropertyRef&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;EmployeeId&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Key&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;EmployeeId&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;SocialSecurityNumber&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;nvarchar(max)&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;NumberOfDependents&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;nvarchar(max)&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;NumberOfAllowances&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;nvarchar(max)&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;EntityType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Association&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;TaxWithholdingEmployee&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;End&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Role&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;TaxWithholding&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Type&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Store.TaxWithholdings&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Multiplicity&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;0..1&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;End&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Role&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Employee&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;Store.Employees&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Multiplicity&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ReferentialConstraint&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: #a31515; font-size: 9.5pt; mso-highlight: yellow;"&gt;Principal&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: red; font-size: 9.5pt; mso-highlight: yellow;"&gt;Role&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; font-size: 9.5pt; mso-highlight: yellow;"&gt;"&lt;span style="color: blue;"&gt;Employee&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: #a31515; font-size: 9.5pt; mso-highlight: yellow;"&gt;PropertyRef&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: red; font-size: 9.5pt; mso-highlight: yellow;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; font-size: 9.5pt; mso-highlight: yellow;"&gt;"&lt;span style="color: blue;"&gt;SocialSecurityNumber&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: #a31515; font-size: 9.5pt; mso-highlight: yellow;"&gt;Principal&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Dependent&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Role&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;TaxWithholding&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;PropertyRef&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;SocialSecurityNumber&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Dependent&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ReferentialConstraint&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Association&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;The details specified in SSDL are very similar to what is specified in the CSDL. A Unique Constraint in CSDL can map to a Unique constraint on the SSDL implicitly, based on how the columns are mapped in the MSL metadata. Nothing additional needs to be specified.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Here are some more details with regards to how Unique constraints can be specified:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;In many ways unique constraints are similar to entity keys:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Unique constraints will be supported on Entity Type&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;More than one scalar property may compose a Unique constraint.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Server generated values can participate in a unique constraint&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Navigation Properties may not participate in a unique constraint. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Associations can be based on unique constraints&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;However, unlike Entity Keys:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Unique constraints have names to identify them. These names should be unique within a type hierarchy.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Nullable properties may participate in unique constraints&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;A given property can participate in more than one unique constraint. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Properties participating in unique constraint may be mutable&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Unique constraints may include properties from a base type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="mso-no-proof: yes;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;Support for OnUpdate cascading behavior&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Unlike Primary Keys, Entity Framework will support mutability on properties that participate in a unique constraint.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;br /&gt;Along with that, we plan on supporting &lt;b style="mso-bidi-font-weight: normal;"&gt;OnUpdate&lt;/b&gt; cascading behavior.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This is something that is supported by databases. It simply allows you to specify that when the principal end of the relationship changes, the dependent end should be automatically updated accordingly as well. &lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Cascading is only handled for entities and relationships that are loaded into the object state manager. If you have &lt;b style="mso-bidi-font-weight: normal;"&gt;OnUpdate&lt;/b&gt; &lt;i style="mso-bidi-font-style: normal;"&gt;Cascade&lt;/i&gt; behavior specified in the model, it will most certainly also make sense to make sure that the database itself has the same &lt;b style="mso-bidi-font-weight: normal;"&gt;OnUpdate&lt;/b&gt; &lt;i style="mso-bidi-font-style: normal;"&gt;Cascade&lt;/i&gt; specification so that the database will manage the referential integrity of your data. This is equivalent to the &lt;b style="mso-bidi-font-weight: normal;"&gt;OnDelete&lt;/b&gt; Cascade behavior supported today for associations based on primary keys. &lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;br /&gt;This is how you can specify &lt;b style="mso-bidi-font-weight: normal;"&gt;OnUpdate&lt;/b&gt; &lt;i style="mso-bidi-font-style: normal;"&gt;Cascade&lt;/i&gt; behavior:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Association&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;TaxWithholdingEmployee&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;End&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Role&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;TaxWithholding&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Type&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Store.TaxWithholdings&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Multiplicity&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;0..1&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;End&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Role&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Employee&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;Store.Employees&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Multiplicity&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background: yellow; mso-highlight: yellow;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: #a31515; font-size: 9.5pt; mso-highlight: yellow;"&gt;OnUpdate&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: red; font-size: 9.5pt; mso-highlight: yellow;"&gt;Action&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: black; font-size: 10pt; mso-bidi-font-size: 11.0pt; mso-highlight: yellow;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; font-size: 9.5pt; mso-highlight: yellow;"&gt;"&lt;span style="color: blue;"&gt;Cascade&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: black; font-size: 10pt; mso-bidi-font-size: 11.0pt; mso-highlight: yellow;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; background: yellow; color: blue; font-size: 9.5pt; mso-highlight: yellow;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;End&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ReferentialConstraint&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Principal&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Role&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Employee&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;PropertyRef&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;SocialSecurityNumber&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Principal&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Dependent&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Role&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;TaxWithholding&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;PropertyRef&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;SocialSecurityNumber&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Dependent&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ReferentialConstraint&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Association&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The default Action for &lt;b style="mso-bidi-font-weight: normal;"&gt;OnUpdate&lt;/b&gt; is &amp;ldquo;None&amp;rdquo;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;What mapping scenarios are not supported?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;We are still contemplating exactly what set of capabilities might not make it into the next release with regards to the unique constraint support&amp;ndash; therefore your feedback on this will be of significant value to us.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;As it stands right now, the following scenarios will &lt;b style="mso-bidi-font-weight: normal;"&gt;*NOT*&lt;/b&gt; be supported:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Split Entities based on Unique Constraints&lt;/b&gt; &amp;ndash; this is the scenario where a single entity is split across multiple tables on the database, where the split/join is based on a Unique Constraint instead of Primary Key.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Inheritance Support with Unique Constraints&lt;/b&gt; &amp;ndash; Support mapping inheritance based on unique constraints as opposed to primary key&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Independent Association based on Unique Constraints &lt;/b&gt;&amp;ndash; This is the association type that was present in Entity Framework 3.5SP1 (as opposed to the Foreign Key Associations that we released in Entity Framework 4.0). In theory it is possible to enable Independent associations to store the foreign key values based on unique constraints but we are considering not supporting it because of the popularity of Foreign Key Associations as the standard way of representing associations.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;We would like to know more about whether you need the following capabilities:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNoSpacing"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Associations based on unique constraints&lt;/b&gt; &amp;ndash; Do you see the need to form associations using unique constraints where you are associating to a unique constraint on the principal end instead of the primary key on that entity? Is this something you see in existing/legacy databases?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNoSpacing"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Mutability of Unique Constraints &lt;/b&gt;&amp;ndash; Mutability of unique constraints are important. However, if you are associating to a unique constraint on the principal end, how important is mutability in this scenario? &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoNoSpacing"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Once again, the purpose of this post is to find out how you&amp;rsquo;d like to see the feature built &amp;ndash; so please feel free to tell us what your own preferences would be around this feature.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;br /&gt;Please let us know what you think!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;br /&gt;Faisal Mohamood &amp;ndash; Program Manager, Entity Framework&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Kati Iceva &amp;ndash; Software Design Engineer, Entity Framework&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10139012" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/EDM/">EDM</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Mapping/">Mapping</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Metadata/">Metadata</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Linq+to+Entities/">Linq to Entities</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/FKs/">FKs</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category></item><item><title>Table-Valued Function Support</title><link>http://blogs.msdn.com/b/efdesign/archive/2011/01/21/table-valued-function-support.aspx</link><pubDate>Sat, 22 Jan 2011 01:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10118903</guid><dc:creator>dpblogs</dc:creator><slash:comments>16</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=10118903</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2011/01/21/table-valued-function-support.aspx#comments</comments><description>&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;One of the key features coming in the next release of Entity Framework is Table-Valued Function support.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;It is a very popular customer request and we have been working diligently to design a solution that we hope you find simple, yet useful.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This design intends to make TVFs first-class citizens on Entity Framework, by allowing a user to map TVFs to both Entities and Complex types.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;This article will explore the design of the feature in the framework, so we will focus on the metadata within the EDMX as opposed to the designer experience in Visual Studio.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;We will cover that experience in a later post.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Other topics we will cover in the future include QueryViews and other complex Function Mapping scenarios.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;With that said, here are the specific areas we will cover now:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;A basic overview of TVFs; pros and cons vs. Stored Procedures and Views&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;How to call a TVF Directly&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;Mapping a TVF to a Collection of Complex type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;Mapping a TVF to a Collection of Entity type and performing CRUD on the Entity&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;We&amp;rsquo;d love to hear your thoughts, so please feel free to comment and make suggestions about any part of this design.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Segoe UI;"&gt;What Are TVFs?&lt;span class="MsoSubtleEmphasis"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;TVFs are User Defined Functions (UDFs) which live in the target database and whose return type is a table.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;UDFs are constructs made up of one or more T-SQL statements.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;In the context of a T-SQL query, TVFs can be used anywhere a View or a Table would be used.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Although there is some overlap between TVFs, Views, and Stored Procedures, there are key advantages which make TVFs appealing in certain scenarios.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Let&amp;rsquo;s look at how TVFs stack up against Views and Stored Procedures:&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;TVFs vs. Views&lt;/b&gt;&lt;br /&gt;TVFs and Views are similar in that they are both composable.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This means that you can use the function&amp;mdash;or the view&amp;mdash;anywhere within the body of a T-SQL query.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Their major differences are, first, that SQL Views can only have one SELECT statement, whereas TVFs can have multiple statements as well as procedural code.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This makes it possible to design more complex logic with TVFs than with Views.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Additionally, TVFs can take parameters, whereas Views cannot.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;TVFs vs. Stored Procedures&lt;/b&gt;&lt;br /&gt;TVFs and stored procedures may both contain procedural code, but unlike stored procedures, TVFs can be used anywhere in a query.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This allows us to both compose queries using TVFs and filter the result set of a TVF.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;One advantage of stored procedures over TVFs is that stored procedures are capable of returning multiple result sets.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Background: TVF declaration and usage in SQL &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;TVFs allow you to write complex statements and queries, all in the same place.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;In this post we will use relatively simple TVFs in order to keep complexity low.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Please read &lt;/span&gt;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms191165.aspx"&gt;&lt;span style="font-family: Segoe UI; color: #0000ff;"&gt;&lt;span style="font-size: small;"&gt;this article&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt; to learn more about TVFs in SQL.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Throughout the post we will use these two TVFs to showcase functionality:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;GetCategories() &lt;/b&gt;returns all of the entries in the Categories table.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 3pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4%; padding-right: 5.4pt; height: 3pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;7.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="96%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 96%; padding-right: 5.4pt; height: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: 'Courier New'; color: blue; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;CREATE FUNCTION&lt;/span&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt; [dbo]&lt;span style="color: gray;"&gt;.&lt;/span&gt;[GetCategories]&lt;span style="color: gray;"&gt;()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: 'Courier New'; color: blue; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;RETURNS&lt;/span&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt; &lt;span style="color: blue;"&gt;TABLE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; color: blue; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;RETURN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; [CategoryID]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;/span&gt;[CategoryName]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;/span&gt;[Description]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;/span&gt;[Picture]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt; [dbo]&lt;span style="color: gray;"&gt;.&lt;/span&gt;[Categories]&lt;span style="color: gray;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoListParagraph"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;GetDetailsForOrder(int) &lt;/b&gt;returns the Order Details for a given order for Id equal to Oid.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 3pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4%; padding-right: 5.4pt; height: 3pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;7.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;9.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;10.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;11.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="96%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 96%; padding-right: 5.4pt; height: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: 'Courier New'; color: blue; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;CREATE FUNCTION&lt;/span&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt; [dbo]&lt;span style="color: gray;"&gt;.&lt;/span&gt;[GetDetailsForOrder]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: 'Courier New'; color: gray; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;(&lt;/span&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;@Oid &lt;span style="color: blue;"&gt;INT&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: 'Courier New'; color: blue; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;RETURNS&lt;/span&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt; &lt;span style="color: blue;"&gt;TABLE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: 'Courier New'; color: blue; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;RETURN&lt;/span&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;SELECT &lt;/span&gt;[OrderID]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;/span&gt;[ProductID]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;/span&gt;[UnitPrice]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;/span&gt;[Quantity]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;/span&gt;[Discount]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: 'Courier New'; color: blue; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;FROM&lt;/span&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt; [dbo]&lt;span style="color: gray;"&gt;.&lt;/span&gt;[OrderDetails]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; OrderID &lt;span style="color: gray;"&gt;=&lt;/span&gt; @Oid&lt;span style="color: gray;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;Typical usage of a TVF in T-SQL as follows:&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 3.5pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4.78%; padding-right: 5.4pt; height: 3.5pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;&lt;span style="font-size: x-small;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="95%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 95.22%; padding-right: 5.4pt; height: 3.5pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: 'Courier New'; color: blue; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;SELECT&lt;/span&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt; d&lt;span style="color: gray;"&gt;.&lt;/span&gt;ProductID&lt;span style="color: gray;"&gt;,&lt;/span&gt; d&lt;span style="color: gray;"&gt;.&lt;/span&gt;Quantity&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: 'Courier New'; color: blue; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt;FROM&lt;/span&gt;&lt;span style="font-family: 'Courier New'; mso-bidi-font-size: 10.0pt; mso-no-proof: yes;"&gt; dbo&lt;span style="color: gray;"&gt;.&lt;/span&gt;GetDetailsForOrder&lt;span style="color: gray;"&gt;(&lt;/span&gt;10248&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;AS&lt;/span&gt; d&lt;span style="color: gray;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;This simple statement returns the category ID and Category Name from our TVF.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #ffffcc; padding-top: 1pt; mso-border-alt: solid windowtext .5pt; mso-element: para-border-div; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;ProductID&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Quantity&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;----------- --------&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;11&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;12&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;42&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;10&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;72&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;5&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;Note that we were able to call the TVF in the FROM clause of our T-SQL query, as we would a table.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Also note that we were able to pass in parameters, and that the result of the query was a table.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This combination of factors, as well as the possibility to have procedural code within your function, is what makes TVFs appealing.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Why Should You Use TVFs in EF?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;If you already use TVFs, the advantages of having EF support are obvious: You will now be able to use your TVFs as the source for materializing entity types and complex types via queries in EF &amp;ndash; giving you the ability to use LINQ and Entity SQL against them. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;If you don&amp;rsquo;t already use TVFs, think about the potential we get from creating Entity or Complex type that is backed by a function instead of an entity.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;TVF support enables interesting scenarios such as &lt;/span&gt;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc721269(v=sql.100).aspx"&gt;&lt;span style="font-family: Segoe UI; color: #0000ff;"&gt;&lt;span style="font-size: small;"&gt;Full-Text search&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt; since in SQL, it is implemented using TVFs.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Segoe UI;"&gt;Using TVFs in Entity Framework&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Now that we&amp;rsquo;ve established what a TVF is, let&amp;rsquo;s see what artifacts we need in order to use one in an EF app:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;Metadata describing the store function and its return type.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;A function stub is required to call the function from a LINQ query.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;The stub is not required for Entity SQL queries.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;These two items are all we need if we want to call the TVF directly in a LINQ or Entity SQL query. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;However, to truly take advantage TVFs in EF (reusability, change tracking, CUD), we also need to describe the mapping of the function to a Collection of Entity Type or Collection of Complex Type.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Segoe UI;"&gt;TVFs as Functions in SSDL returning RowType&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Storage Layer&lt;br /&gt;&lt;/strong&gt;In order to make the TVF visible to Entity Framework, we must declare the store function in the storage layer (SSDL). &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;We must specify the function name, whether or not it is composable, and the schema it belongs to.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Up until version 4 of EF, the &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb738614.aspx"&gt;&lt;span style="font-family: Segoe UI; color: #0000ff;"&gt;&lt;span style="font-size: small;"&gt;Function&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt; node was only capable of returning a scalar.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Our new design required us to make two changes to this node: First, we can now set IsComposable to true, and therefore we are able to compose functions.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Second, the return type is no longer a property of Function, but instead a child node in which we can describe the rich return types produced by TVFs.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Here is how we declare the store function called GetCategories in our SSDL:&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 3pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="5%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 5.24%; padding-right: 5.4pt; height: 3pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;7.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;9.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;10.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;11.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;12.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;13.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="94%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 94.76%; padding-right: 5.4pt; height: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="font-family: Consolas; color: green; font-size: 9.5pt;"&gt;SSDL&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Function&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;GetCategories&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;true&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ReturnType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;CollectionType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;RowType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;CategoryID&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;CategoryName&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;nvarchar&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;15&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Description&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;ntext&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Picture&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;image&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;RowType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;CollectionType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ReturnType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Function&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;Here we specify the ReturnType of the Function.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;In this case it will be a collection of RowTypes.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Object Layer&lt;/b&gt;&lt;br /&gt;We need a function stub to refer to the store function from a LINQ query.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;The result of calling the function stub is a set of unstructured rows.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;See this &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://blogs.msdn.com/b/efdesign/archive/2008/10/08/edm-and-store-functions-exposed-in-linq.aspx"&gt;&lt;span style="font-family: Segoe UI; color: #0000ff;"&gt;&lt;span style="font-size: small;"&gt;design blog&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt; to learn more about function stubs. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;Here is what the stub will look like:&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 2.5pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4.14%; padding-right: 5.4pt; height: 2.5pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="95%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 95.86%; padding-right: 5.4pt; height: 2.5pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;[&lt;span style="color: #2b91af;"&gt;EdmFunction&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"NorthwindModel.Store"&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;"GetCategories"&lt;/span&gt;)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #2b91af;"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;DbDataRecord&lt;/span&gt;&amp;gt; GetCategoriesDirect()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.CreateQuery&amp;lt;&lt;span style="color: #2b91af;"&gt;DbDataRecord&lt;/span&gt;&amp;gt;(&lt;span style="color: #a31515;"&gt;"[NorthwindModel.Store].[GetCategories]()"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;This stub will usually reside within your strongly typed ObjectContext class.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Here are a few things to take note of:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;The stub returns a collection of DbDataRecord.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;These records aren&amp;rsquo;t richly typed and therefore only provide us with limited functionality.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;The EdmFunction attribute is the store&amp;rsquo;s namespace since we are calling a store function.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;Our function stub contains a meaningful body, as opposed to an exception (see &lt;/span&gt;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd456847.aspx"&gt;&lt;span style="font-family: Segoe UI; color: #0000ff;"&gt;&lt;span style="font-size: small;"&gt;here&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt; for an example).&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This &amp;lsquo;bootstrapping&amp;rsquo; allows us to call the function in the FROM clause of our LINQ query.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Here is exactly how we would call our TVF:&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 27.4pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4.14%; padding-right: 5.4pt; height: 27.4pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;7.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="95%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 95.86%; padding-right: 5.4pt; height: 27.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;using&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&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: #2b91af;"&gt;NorthwindEntities&lt;/span&gt;())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: green; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//Call GetCategories directly using Entity LINQ&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; query = &lt;span style="color: blue;"&gt;from&lt;/span&gt; c &lt;span style="color: blue;"&gt;in&lt;/span&gt; context.GetCategoriesDirect()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;select&lt;/span&gt; c;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; r &lt;span style="color: blue;"&gt;in&lt;/span&gt; query)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515;"&gt;"[{0}] {1}"&lt;/span&gt;, r.GetInt32(0), r.GetString(1));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style="margin: 0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;span style="font-family: Segoe UI; color: #4f81bd; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;The stub is not required when using Entity SQL for our queries.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Here is how to call the same TVF in Entity SQL:&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 2.8pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4.14%; padding-right: 5.4pt; height: 2.8pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;7.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;9.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;10.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="95%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 95.86%; padding-right: 5.4pt; height: 2.8pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;using&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&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: #2b91af;"&gt;NorthwindEntities&lt;/span&gt;())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: green; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//Call GetCategories directly using Entity SQL&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; query = &lt;span style="color: #a31515;"&gt;@"Select Category.CategoryId, Category.CategoryName&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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; &lt;/span&gt;From NorthwindModel.Store.getCategories() as Category"&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; categories = context.CreateQuery&amp;lt;&lt;span style="color: #2b91af;"&gt;DbDataRecord&lt;/span&gt;&amp;gt;(query);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;DbDataRecord&lt;/span&gt; category &lt;span style="color: blue;"&gt;in&lt;/span&gt; categories)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515;"&gt;"[{0}]: {1}"&lt;/span&gt;, category.GetInt32(0), category.GetString(1));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;The functionality above is useful, but only to a limited extent since unstructured data records are read only.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Segoe UI;"&gt;Mapping TVF to Complex Types and Entity Types&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Function Mapping is a new feature which allows us to map the TVF&amp;rsquo;s results to a collection of Complex Type as well as a collection of Entity Type.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;By mapping to an Entity Type, we gain full CRUD functionality against our entities. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;The first step is to specify the function mapping in the mapping layer.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Result Type Mapping&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Below we map a function in the conceptual layer to a function in the storage layer with an explicit return type mapping.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Explicit mapping is supported for conceptual functions returning collection of Complex Type or a collection of Entity Type.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Using explicit mapping, we describe how each property in the conceptual function will map to a property in the store function.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;We could use implicit mapping, but only for conceptual functions returning a scalar or a collection of Rowtype with primitive properties.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Collection of Complex Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;A TVF&amp;rsquo;s result set can map to a collection Complex Type.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This is the default behavior when using Model First or EDMGen.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Let&amp;rsquo;s explore this mapping using GetDetailsForOrder:&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Storage Layer&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 3pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4.82%; padding-right: 5.4pt; height: 3pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;7.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;9.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;10.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;11.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;12.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;13.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;14.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;15.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;16.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="95%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 95.18%; padding-right: 5.4pt; height: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="font-family: Consolas; color: green; font-size: 9.5pt;"&gt;SSDL&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Function&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;GetDetailsForOrder&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;true&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Parameter&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Oid&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ReturnType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;CollectionType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;RowType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;OrderID&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;ProductID&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;UnitPrice&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;money&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Quantity&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;smallint&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Discount&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;real&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;RowType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;CollectionType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ReturnType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Function&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;Mapping Layer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;To tie the function to a collection of Complex Types, we need to create a mapping between our store function and a conceptual function.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;We do that in the following way:&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 3.2pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4.82%; padding-right: 5.4pt; height: 3.2pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;7.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;9.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;10.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;11.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;12.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;13.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;14.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;15.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;16.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="95%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 95.18%; padding-right: 5.4pt; height: 3.2pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="font-family: Consolas; color: green; font-size: 9.5pt;"&gt;MSL&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;FunctionMapping&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;StorageFunction&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;NorthwindModel.Store.GetDetailsForOrder&lt;/span&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&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;/span&gt;&lt;span style="color: red;"&gt;CdmFunction&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;NorthwindModel.GetDetailsForOrder&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Parameters&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Parameter&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;TypeName&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Edm.Int32&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Parameters&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ResultMapping&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ComplexTypeMapping&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ScalarProperty&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;OrderID&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ColumnName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;OrderID&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ScalarProperty&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;ProductID&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ColumnName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;ProductID&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ScalarProperty&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;UnitPrice&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ColumnName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;UnitPrice&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ScalarProperty&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Quantity&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ColumnName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Quantity&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ScalarProperty&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Discount&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ColumnName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Discount&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ComplexTypeMapping&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ResultMapping&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;FunctionMapping&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;The explicit mapping above describes how to map the columns returned by the TVF to our Complex Type&amp;rsquo;s properties.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;It also describes the parameters.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;In this iteration we will only support parameters of Primitive type.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Conceptual Layer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Finally we need a conceptual function whose return type is a collection of Complex Types.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;The Complex type and the function look like the following:&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 2.8pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4.82%; padding-right: 5.4pt; height: 2.8pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;7.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;9.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;10.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;11.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;12.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;13.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="95%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 95.18%; padding-right: 5.4pt; height: 2.8pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="font-family: Consolas; color: green; font-size: 9.5pt;"&gt;CSDL&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ComplexType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;GetDetailsForOrder_Result&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;OrderID&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; &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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;ProductID&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; &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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;UnitPrice&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;Decimal&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;Precision&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;19&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Scale&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;4&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Quantity&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;Int16&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Property&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Discount&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;Single&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ComplexType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;hellip;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Function&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;GetDetailsForOrder&lt;/span&gt;"&lt;span style="color: blue;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;ReturnType&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Collection(NorthwindModel.GetDetailsForOrder_Result)&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Parameter&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Oid&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Function&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;In the code above we declared a complex type then we created a function which returns a collection of such type.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;EDMGen uses &amp;ldquo;&amp;lt;FunctionMame&amp;gt;_result&amp;rdquo; as the Complex Type&amp;rsquo;s name by default when generating metadata.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Object Layer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Once these are in place we can use call TVF using Entity SQL. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;However, we need a new function stub to use the TVF in a LINQ query:&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 2.5pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4.14%; padding-right: 5.4pt; height: 2.5pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="95%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 95.86%; padding-right: 5.4pt; height: 2.5pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;[&lt;span style="color: #2b91af;"&gt;EdmFunction&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"NorthwindModel"&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;"GetDetailsForOrder"&lt;/span&gt;)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #2b91af;"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;GetDetailsForOrder_Result&lt;/span&gt;&amp;gt; GetDetailsForOrder(&lt;span style="color: blue;"&gt;int&lt;/span&gt; Oid)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.CreateQuery&amp;lt;&lt;span style="color: #2b91af;"&gt;GetDetailsForOrder_Result&lt;/span&gt;&amp;gt;(&lt;span style="color: #a31515;"&gt;"NorthwindModel.GetDetailsForOrder(@Oid)"&lt;/span&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;new&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #2b91af;"&gt;ObjectParameter&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Oid"&lt;/span&gt;, Oid));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;The noteworthy differences from our first stub are that this one returns a collection of Complex Type, rather than a collection of unstructured records. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;Also, note that the first parameter in the EdmFunction attribute is the &lt;b style="mso-bidi-font-weight: normal;"&gt;conceptual function&lt;/b&gt;, as opposed to the store function.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Usage&lt;br /&gt;&lt;/b&gt;Let&amp;rsquo;s have a look at the basic usage of our function in LINQ and Entity SQL.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 27.4pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4.82%; padding-right: 5.4pt; height: 27.4pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;7.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;9.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;10.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="95%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 95.18%; padding-right: 5.4pt; height: 27.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;using&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&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: #2b91af;"&gt;NorthwindEntities&lt;/span&gt;())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt; OrderId = 10248;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;//GetDetailsForOrder using LINQ&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; OrderDetails = &lt;span style="color: blue;"&gt;from&lt;/span&gt; O &lt;span style="color: blue;"&gt;in&lt;/span&gt; context.GetDetailsForOrder(OrderId)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;select&lt;/span&gt; O;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; od &lt;span style="color: blue;"&gt;in&lt;/span&gt; OrderDetails)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515;"&gt;"[{0}] {1}"&lt;/span&gt;, od.OrderID, od.ProductID);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height: 13.45pt; mso-yfti-irow: 1; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4.82%; padding-right: 5.4pt; height: 13.45pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;7.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;9.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;10.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;11.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;12.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;13.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;14.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="95%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 95.18%; padding-right: 5.4pt; height: 13.45pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;using&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&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: #2b91af;"&gt;NorthwindEntities&lt;/span&gt;())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt; OrderId = 10248;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;//GetDetailsForOrder using Entity SQL&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; queryString = &lt;span style="color: #a31515;"&gt;@"Select VALUE OrderDetail&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;From NorthwindModel.GetDetailsForOrder(@Oid) as OrderDetail"&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ObjectQuery&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;GetDetailsForOrder_Result&lt;/span&gt;&amp;gt; OrderDetailsQuery =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ObjectQuery&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;GetDetailsForOrder_Result&lt;/span&gt;&amp;gt;(queryString, context);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;OrderDetailsQuery.Parameters.Add(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ObjectParameter&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Oid"&lt;/span&gt;, OrderId));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; result &lt;span style="color: blue;"&gt;in&lt;/span&gt; OrderDetailsQuery)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515;"&gt;"[{0}] {1}"&lt;/span&gt;, result.OrderID, result.ProductID);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;span style="color: blue;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;Both samples do the same.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;They call GetDetailsForOrder with an OrderId of 10248 and then iterate over the result.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;Collection of Entity Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;We can also make our TVF return entities.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;We get all of the functionality we would expect from entities, such as reading, writing, and navigation provided by using NavigationProperties.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;EDMGen does not map to Entities by default, but we intend to provide tooling support to create such mapping without having to edit the EDMX.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Storage Layer&lt;br /&gt;&lt;/b&gt;The store function definition remains the same as described above.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Mapping Layer&lt;/b&gt;&lt;br /&gt;Now we need to describe the mapping between the store function and the conceptual function.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 3pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4.82%; padding-right: 5.4pt; height: 3pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;7.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;9.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;10.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;11.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;12.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;13.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;14.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;15.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;16.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="95%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 95.18%; padding-right: 5.4pt; height: 3pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="font-family: Consolas; color: green; font-size: 9.5pt;"&gt;MSL&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;FunctionMapping&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;StorageFunction&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;NorthwindModel.Store.GetDetailsForOrder&lt;/span&gt;"&lt;span style="color: blue;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CdmFunction&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;NorthwindModel.GetDetailsForOrderAsEntity&lt;/span&gt;"&lt;span style="color: blue;"&gt; &amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Parameters&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Parameter&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;TypeName&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Edm.Int32&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Parameters&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ResultMapping&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;EntityTypeMapping&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;TypeName&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;NorthwindModel.OrderDetails&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ScalarProperty&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;OrderID&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ColumnName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;OrderID&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ScalarProperty&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;ProductID&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ColumnName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;ProductID&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ScalarProperty&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;UnitPrice&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ColumnName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;UnitPrice&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ScalarProperty&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Quantity&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ColumnName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Quantity&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ScalarProperty&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Discount&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ColumnName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Discount&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;EntityTypeMapping&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;ResultMapping&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;FunctionMapping&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;This mapping describes the TVF&amp;rsquo;s parameters and maps the function&amp;rsquo;s result to a collection of Entity types named OrderDetails.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Each ScalarProperty node has two properties, Name and ColumnName.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Name refers to the EntityType and ColumnName refers to the Store function.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Function Mapping supports Table-Per-Hierarchy inheritance, much like in FunctionImportMapping.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This topic will be covered in a later post.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Conceptual Layer&lt;br /&gt;&lt;/b&gt;When you map a function to a collection of Entity types, you get the following in the CSDL:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 10.75pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4.82%; padding-right: 5.4pt; height: 10.75pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="95%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 95.18%; padding-right: 5.4pt; height: 10.75pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="font-family: Consolas; color: green; font-size: 9.5pt;"&gt;CSDL&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Function&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;GetDetailsForOrderAsEntity&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;Collection(NorthwindModel.OrderDetails)&lt;/span&gt;"&lt;span style="color: blue;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;EntityContainer&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;NorthwindEntities&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;EntitySet&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;OrderDetails&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Parameter&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: red; font-size: 9.5pt;"&gt;Name&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;span style="color: blue;"&gt;Oid&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;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: Consolas; color: #a31515; font-size: 9.5pt;"&gt;Function&lt;/span&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;This metadata is similar to our previous example.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;However, when mapping to Entity types, we must list two additional properties in our Function node: an EntityContainer and an EntitySet.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;These two values must refer to existing artifacts in the conceptual layer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Object Layer&lt;/b&gt;&lt;br /&gt;Here is our function stub for a TVF&amp;rsquo;s result set mapped to a collection of Entity Types:&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 2.5pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4.14%; padding-right: 5.4pt; height: 2.5pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="95%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 95.86%; padding-right: 5.4pt; height: 2.5pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;[&lt;span style="color: #2b91af;"&gt;EdmFunction&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"NorthwindModel"&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;"GetDetailsForOrderAsEntity"&lt;/span&gt;)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #2b91af;"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;OrderDetails&lt;/span&gt;&amp;gt; GetDetailsForOrderAsEntity(&lt;span style="color: blue;"&gt;int&lt;/span&gt; Oid)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.CreateQuery&amp;lt;&lt;span style="color: #2b91af;"&gt;OrderDetails&lt;/span&gt;&amp;gt;(&lt;span style="color: #a31515;"&gt;"[NorthwindModel].[GetDetailsForOrderAsEntity](@Oid)"&lt;/span&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;new&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: #2b91af;"&gt;ObjectParameter&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Oid"&lt;/span&gt;, Oid));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;br /&gt;Usage&lt;br /&gt;&lt;/b&gt;With our mapping in place, we can begin using our Entities in the usual fashion. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;In the following example we will call our TVF and do some simple update to the resulting Entities:&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1" class="MsoTableGrid" style="width: 100%; border-collapse: collapse; background: #f3ffff; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184;"&gt;
&lt;tbody&gt;
&lt;tr style="height: 27.4pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;"&gt;
&lt;td width="4%" valign="top" style="padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 4.82%; padding-right: 5.4pt; height: 27.4pt; padding-top: 0in; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;4.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;7.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;9.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;10.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;11.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;12.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;13.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;14.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;15.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;16.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;17.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;18.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;19.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;20.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;21.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;22.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;23.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt; mso-no-proof: yes;"&gt;24.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="95%" valign="top" style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 95.18%; padding-right: 5.4pt; height: 27.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0in; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;using&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&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: #2b91af;"&gt;NorthwindEntities&lt;/span&gt;())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Segoe UI; font-size: x-small;"&gt; &lt;/span&gt;&lt;span style="font-family: Consolas; color: green; font-size: 9.5pt;"&gt;Use GetDetailsForOrderAsEntity with LINQ and update entities using ObjectContext&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; OrderDetails = &lt;span style="color: blue;"&gt;from&lt;/span&gt; OrderDetail &lt;span style="color: blue;"&gt;in&lt;/span&gt; context.GetDetailsForOrderAsEntity(10248)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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; &lt;/span&gt;&lt;span style="color: blue;"&gt;where&lt;/span&gt; OrderDetail.Quantity &amp;gt; 1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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; &lt;/span&gt;&lt;span style="color: blue;"&gt;select&lt;/span&gt; OrderDetail;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; item &lt;span style="color: blue;"&gt;in&lt;/span&gt; OrderDetails)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515;"&gt;"[{0}] {1} &amp;ndash; Original Quantity={2}"&lt;/span&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;item.OrderID, item.ProductID, item.Quantity);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;item.Quantity = 1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.SaveChanges();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;OrderDetails = &lt;span style="color: blue;"&gt;from&lt;/span&gt; OrderDetail &lt;span style="color: blue;"&gt;in&lt;/span&gt; context.GetDetailsForOrderAsEntity(10248)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&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;&lt;/span&gt;&lt;span style="color: blue;"&gt;select&lt;/span&gt; OrderDetail;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515;"&gt;"New Values"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; item &lt;span style="color: blue;"&gt;in&lt;/span&gt; OrderDetails)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515;"&gt;"[{0}] {1} &amp;ndash; New Quantity={2}"&lt;/span&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;item.OrderID, item.ProductID, item.Quantity);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;In this example we get the products in Order #10248 with a quantity greater than 1. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;Then we change each quantity to 1.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;The important thing to note about this scenario is that we were able to query for a specific set of order details &amp;ndash;those with a quantity greater than 1&amp;mdash;using a TVF.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Then we edited the resulting entities to which the TVFs result set was mapped.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 12pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Segoe UI;"&gt;Wrap-Up&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;In this article we have covered:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;Background on TVFs in SQL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;Calling a TVF directly from a LINQ or Entity SQL query&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;Metadata for mapping a collection of Complex Type to a TVF, and subsequent usage&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&amp;middot;&lt;span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;"&gt;&amp;nbsp;&amp;nbsp;&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-family: Segoe UI;"&gt;Metadata for mapping a collection of Entity Type to a TVF, and subsequent usage including CUD&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Segoe UI;"&gt;&lt;span style="font-size: small;"&gt;TVF support will be a key component of Entity Framework&amp;rsquo;s next release.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Our goal is to provider first-class support for TVFs by allowing users to map the function&amp;rsquo;s result set to Entity types and Complex types. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;We look forward to getting your feedback, so feel free to make any comments or ask questions about this design.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: 'Segoe UI','sans-serif'; mso-fareast-font-family: Calibri; mso-bidi-font-size: 11.0pt; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;&lt;span style="font-size: small;"&gt;Pedro Ardila&lt;br /&gt;Program Manager &lt;br /&gt;ADO.Net Entity Framework Team&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10118903" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/EDM/">EDM</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Mapping/">Mapping</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Linq+to+Entities/">Linq to Entities</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Functions/">Functions</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category></item><item><title>Code First Database Evolution (aka Migrations)</title><link>http://blogs.msdn.com/b/efdesign/archive/2010/10/22/code-first-database-evolution-aka-migrations.aspx</link><pubDate>Fri, 22 Oct 2010 21:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10079774</guid><dc:creator>dpblogs</dc:creator><slash:comments>45</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=10079774</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2010/10/22/code-first-database-evolution-aka-migrations.aspx#comments</comments><description>&lt;p&gt;Back in July we released the &lt;a href="http://blogs.msdn.com/b/adonet/archive/2010/07/14/ctp4announcement.aspx"&gt;latest preview of Code First&lt;/a&gt; and we&amp;rsquo;ve been receiving a lot of feedback that is helping us shape this feature. One of the top asks we are hearing is for a solution that will evolve the database schema as your object model changes over time, often referred to as migrations.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Our team is looking at a few different options in this area and we really want to get your feedback on one of the options we are considering that takes a somewhat different approach to most existing migration solutions.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve put together a screen cast to walk you through a storyboard style mock-up we built that shows this solution being used to build and deploy an application. We really want your feedback to help us shape and evaluate this option, you can provide feedback using the comment functionality on this post.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This is the first time our team has used a storyboard screencast to share proposed designs so we&amp;rsquo;d also love to hear your feedback on whether this is an effective way to share our ideas.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ADO.NET Entity Framework Team&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #ff0000;"&gt;(HD option is available in lower right corner of player while the screencast is playing)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe type="text/html" width="550" frameborder="0" src="http://www.youtube.com/embed/tImrLkaxXpI?hd=1" height="420" title="Screencast" class="youtube-player"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10079774" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Evolving+APIs/">Evolving APIs</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Migration/">Migration</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/What_2700_s+New/">What's New</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Productivity+Improvements/">Productivity Improvements</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Code+First/">Code First</category></item><item><title>Entity Designer Improvements Preview</title><link>http://blogs.msdn.com/b/efdesign/archive/2010/10/11/entity-designer-improvements-preview.aspx</link><pubDate>Mon, 11 Oct 2010 23:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10074400</guid><dc:creator>dpblogs</dc:creator><slash:comments>58</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=10074400</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2010/10/11/entity-designer-improvements-preview.aspx#comments</comments><description>&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The team has been quietly working on a number of improvements to the entity designer that we would like to show off and get feedback on. This particular set of features is targeted at making modeling more productive and scalable, and models themselves more comprehensible.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;br /&gt;We&amp;rsquo;ll start with the small, fun things, and build up to a grand finale.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;br /&gt;1. Association Highlighting&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Let&amp;rsquo;s start with this. Consider the following model:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;&lt;v:shapetype coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f" id="_x0000_t75"&gt;&amp;nbsp;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/4578.AssociationHighlighting.jpg" border="0" /&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"&gt;&lt;/v:path&gt;&lt;o:lock v:ext="edit" aspectratio="t"&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;We would like to rename the navigation properties to something meaningful, as well as the foreign keys. But which navigation property is related to which foreign key? And to which association connector?&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;So, now you can select an association or navigation property and find out. Here, we select the &amp;ldquo;Address.Person&amp;rdquo; navigation property, and the designer highlights the two entity types involved in the association, the association connector, the navigation property on the other side, as well as the foreign keys that hold the navigation information.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/2664.AssociationHighlighting2.jpg" border="0" /&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;This makes it easier for us to rename things to:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/3122.AssociationHighlighting3.jpg" border="0" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;2. Property Reordering&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Imagine that you want to add a &amp;ldquo;Name&amp;rdquo; property to the &amp;ldquo;Property&amp;rdquo; type above. You do this and end up with a type that looks like this:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/7534.PropertyReordering.jpg" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;But of course, you want this new property to be the second one in the type, below &amp;ldquo;Id&amp;rdquo;. Well, now you can select this property and, for example, press Alt + Home, which will move that property to the top of the type, then on Alt + Down Arrow to move it down one slot. Here is a screenshot of the type, along with the new &amp;ldquo;Move Properties&amp;rdquo; menu:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;o:p&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/3833.PropertyReordering2.jpg" border="0" /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;br /&gt;You can now select multiple properties at the same time and move them.&amp;nbsp; For example:&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/1777.PropertyReordering3.jpg" border="0" /&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p&gt;&lt;o:p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;br /&gt;3. Entity Shape Coloring&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Imagine, now, that our model has gotten more complex, and viewing it all in one window renders areas of the diagram hard to distinguish:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;o:p&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/4237.EntityShapeColoring.jpg" border="0" /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Entity shape coloring allows us to visually divide a single diagram into multiple meaningful areas by color coding them. You can select one or more entities and in their property sheet, change their color, which lets us do something like this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/0841.EntityShapeColoring2.jpg" border="0" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;o:p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;4. Multiple Diagrams&lt;span style="color: #1f497d;"&gt;!&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;But what if you just want to look at subject areas within a diagram? Say, the product catalog entities, or the sales types. In that case, you can select any number of entities and move them into a new diagram by right-clicking and selecting the new &amp;ldquo;Move to new Diagram&amp;rdquo; menu item. If we do this to our &amp;ldquo;Property&amp;rdquo; type, we&amp;rsquo;ll see it appear in a new &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;diagram. And, if we make the model browser tool window visible, we&amp;rsquo;ll see this:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;o:p&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/7635.MultipleDiagrams.jpg" border="0" /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Note that we now have a new &amp;ldquo;Diagrams&amp;rdquo; folder in the model browser, and that the new diagram opens in its own tab, allowing you to have multiple windows open at once against the same model. This diagram is a little sparse. Let&amp;rsquo;s bring into it any types related to &amp;ldquo;Property&amp;rdquo; by right-clicking it and selecting &amp;ldquo;Include Related&amp;rdquo;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;o:p&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/1200.MultipleDiagrams2.jpg" border="0" /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;o:p&gt;
&lt;p class="MsoNormal"&gt;Now, color the &amp;ldquo;Person&amp;rdquo; type green, then bring its related type, and see how they pick up the original type&amp;rsquo;s color:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/4035.MultipleDiagrams3.jpg" border="0" /&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p&gt;&lt;o:p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;(Note that this models is not a real-world one and only intended for visualization purposes.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Some additional notes:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;-&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 7pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;You can also drag and drop associations, types, and entity sets from the model browser.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;-&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 7pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;You can cut or copy and paste objects from one diagram to another.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;-&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 7pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Deleting objects from a diagram will no longer delete them from the model, but only from the diagram.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;-&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 7pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;You can delete objects from the model by using Shift+Del, right clicking and selecting &amp;ldquo;Delete from Model&amp;rdquo;, or deleting them from the model browser.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;-&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 7pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Diagrams are stored in a child file of the edmx for new edmx files. For backwards compatibility, models created in previous versions of visual studio will keep the diagram information in the EDMX file itself. However, you can move the diagram information from the EDMX to a child file by right clicking and selecting the &amp;ldquo;Move Diagrams to Separate File&amp;rdquo; context menu.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;We look forward to your feedback!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp; Noam&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10074400" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Customization/">Customization</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Designer/">Designer</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+4/">Entity Framework 4</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/What_2700_s+New/">What's New</category></item><item><title>Data Binding with DbContext</title><link>http://blogs.msdn.com/b/efdesign/archive/2010/09/08/data-binding-with-dbcontext.aspx</link><pubDate>Wed, 08 Sep 2010 20:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10059488</guid><dc:creator>dpblogs</dc:creator><slash:comments>19</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=10059488</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2010/09/08/data-binding-with-dbcontext.aspx#comments</comments><description>&lt;hr /&gt;
&lt;p align="center"&gt;&lt;span style="color: #ff0000; font-size: x-large;"&gt;The information in this post is out of date.&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;span style="color: #ff0000; font-size: large;"&gt;Visit &lt;a href="http://msdn.com/data/ef"&gt;msdn.com/data/ef&lt;/a&gt; for the latest information on current and past releases of EF.&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;span style="color: #ff0000; font-size: large;"&gt;For WPF Data Binding see &lt;a href="http://msdn.com/data/jj574514"&gt;http://msdn.com/data/jj574514&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;span style="color: #ff0000; font-size: large;"&gt;&lt;span style="color: #ff0000; font-size: large;"&gt;For WinForms Data Binding see &lt;a href="http://msdn.com/data/jj682076"&gt;http://msdn.com/data/jj682076&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;We recently &lt;a href="http://blogs.msdn.com/b/adonet/archive/2010/07/14/ctp4codefirstwalkthrough.aspx"&gt;announced the release of Feature CTP4&lt;/a&gt; for the ADO.Net Entity Framework (EF). CTP4 contains a preview of new features that we are considering adding to the core framework and would like community feedback on. CTP4 builds on top of the existing Entity Framework 4 (EF4) which shipped as part of .NET Framework 4.0 and Visual Studio 2010.&lt;/p&gt;
&lt;p&gt;CTP4 contains the first preview of a set of Productivity Improvements for EF that provide a cleaner and simpler API surface designed to allow developers to accomplish the same tasks with less code and fewer concepts. The Productivity Improvement effort is described in more detail in a recent &lt;a href="http://blogs.msdn.com/b/efdesign/archive/2010/06/21/productivity-improvements-for-the-entity-framework.aspx"&gt;Design Blog post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Since the release of CTP4 we have been working to enable more scenarios for developers using DbContext &amp;amp; DbSet, one of the scenarios we have been looking at is Data Binding in WPF and WinForms. The purpose of this post is to share the direction we are heading and provide the chance for feedback on our design. The features discussed in this post are not included in CTP4.&lt;/p&gt;
&lt;h2&gt;Requirements&lt;/h2&gt;
&lt;p&gt;Before we cover the current design let&amp;rsquo;s take a quick look at the requirements we used to drive the design:&lt;/p&gt;
&lt;p&gt;The high level requirement is to &amp;ldquo;enable two way data binding to a set of objects retrieved from a DbContext&amp;rdquo;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The set of objects bound to a control will all be of the same base type &lt;br /&gt;(i.e. all belong to the same DbSet&amp;lt;T&amp;gt;)&lt;/li&gt;
&lt;li&gt;Binding should display Unchanged, Modified and Added objects of the given type
&lt;ul&gt;
&lt;li&gt;Deleted objects should not be displayed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Data binding features in WPF and WinForms (such as sorting) should be supported natively&lt;/li&gt;
&lt;li&gt;Data binding should be two-way
&lt;ul&gt;
&lt;li&gt;When the UI adds an object to the data source it should be added to the DbContext&lt;/li&gt;
&lt;li&gt;When the UI removes an object&amp;nbsp;from the data source it should deleted from the DbContext&lt;/li&gt;
&lt;li&gt;When a new object enters the DbContext it should appear in the UI&lt;/li&gt;
&lt;li&gt;When an object is deleted from the DbContext it should be removed from the UI&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;WPF Experience&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s say we have a WPF window that displays a list of Employees and has a &amp;ldquo;Save&amp;rdquo; button:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/6136.EmployeeScreen.png" alt="" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Using some new additions to the DbSet&amp;lt;T&amp;gt; API we could implement the code behind our window as follows:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;namespace DatabindingSample &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public partial class CustomerWindow : Window &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private EmployeeContext context = new EmployeeContext();&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public CustomerWindow() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void Window_Loaded(object sender, RoutedEventArgs e) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="background-color: #ffff00;"&gt;context.Employees.Load();&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="background-color: #ffff00;"&gt;this.DataContext = context.Employees.Local;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void Save_Click(object sender, RoutedEventArgs e) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.context.SaveChanges(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void Window_Closing(object sender, CancelEventArgs e) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.context.Dispose(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;DbSet&amp;lt;TEntity&amp;gt;.Local&lt;/h3&gt;
&lt;p&gt;This new property will give you an ObservableCollection&amp;lt;TEntity&amp;gt; that contains all Unchanged, Modified and Added objects that are currently tracked by the DbContext for the given DbSet. As new objects enter the DbSet (through queries, DbSet.Add/Attach, etc.) they will appear in the ObservableCollection. When an object is deleted from the DbSet it will also be removed from the ObservableCollection. Adding or Removing from the ObservableCollection will also perform the corresponding Add/Remove on the DbSet. Because WPF natively supports binding to an ObservableCollection there is no additional code required to have two way data binding with full support for WPF sorting, filtering etc.&lt;/p&gt;
&lt;h3&gt;Load Extension Method&lt;/h3&gt;
&lt;p&gt;Because DbSet&amp;lt;TEntity&amp;gt;.Local gives us objects that are currently tracked by the DbContext we need a way to get existing objects from the database loaded into memory. Load is a new extension method on IQueryable that will cause the results of the query to be iterated, in EF this equates to materializing the results as objects and adding them to the DbContext in the Unchanged state. Of course you aren&amp;rsquo;t restricted to using the Load method to bring data into memory for databinding, any existing operations that cause objects to be materialized will also work (such as iterating results, ToList, ToArray, etc.).&lt;/p&gt;
&lt;h3&gt;Filtering&lt;/h3&gt;
&lt;p&gt;Because Load is an extension on IQueryable it can be called directly on a DbSet to load all items into memory or it can be used after LINQ operators. For example we could re-write our WPF code to only load Employees with an IsActive flag set to true:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;private void Window_Loaded(object sender, RoutedEventArgs e)&amp;nbsp; &lt;br /&gt;{&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; context.Employees.Where(e =&amp;gt; e.IsActive).Load();&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.DataContext = context.Employees.Local;&amp;nbsp; &lt;br /&gt;}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The above example only works if we only ever bring active Employees into the context, but if&amp;nbsp;other parts of the application need to bring inactive Employees into memory using the same context then we need a better way to filter. If you are using WPF then this functionality is already built in:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;private void Window_Loaded(object sender, RoutedEventArgs e)&amp;nbsp; &lt;br /&gt;{&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; context.Employees.Load();&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var view = new ListCollectionView(context.Employees.Local); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; view.Filter =&amp;nbsp;e =&amp;gt; ((Employee)e).IsActive; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.DataContext =&amp;nbsp; view; &lt;br /&gt;}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Outside of WPF there are many other databinding frameworks (such as Continuous LINQ) that solve this problem.&lt;/p&gt;
&lt;h2&gt;WinForms Experience&lt;/h2&gt;
&lt;p&gt;The WinForms experience is very similar to WPF except that we need a collection that implements IBindingList rather than an ObservableCollection. We unfortunately can&amp;rsquo;t cater for both technologies with the same collection type because WPF will use the IBindingList interface if it is present and this gives a degraded databinding experience. Therefore we require one additional step to convert our ObservableCollection&amp;lt;TEntity&amp;gt; to something that WinForms will happily bind to. Using a similar form as the WPF example but this time in WinForms:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-06-61/7510.EmployeeScreenWinForms.png" alt="" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Our code behind looks very similar to the WPF code except that we call ToBindingList to convert our local list to a WinForms friendly equivalent:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;namespace DatabindingSample &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public partial class CustomerForm : Form &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private EmployeeContext context = new EmployeeContext(); &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public CustomerForm() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void CustomerForm_Load(object sender, EventArgs e) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="background-color: #ffff00;"&gt;context.Employees.Load();&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="background-color: #ffff00;"&gt;this.employeeBindingSource.DataSource = context.Employees.Local.ToBindingList();&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void saveButton_Click(object sender, EventArgs e) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.context.SaveChanges(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void CustomerForm_FormClosing(object sender, FormClosingEventArgs e) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.context.Dispose(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Binding to Queries&lt;/h2&gt;
&lt;p&gt;One obvious question might be &amp;ldquo;Why not just bind directly to the results of a query?&amp;rdquo;. There are a couple of reasons we decided not to pursue this approach. LINQ to Entities queries pull results directly from the database which means they do not include objects that are in the context in an added state and may also include objects that have been marked as deleted, this is obviously not ideal when databinding as the UI won&amp;rsquo;t display new objects and may show deleted objects. Binding directly to a query would also cause a query to be issued to the database every time the UI iterates the collection, meaning if the UI needed to refresh it would result in all your data being pulled from the database again.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;In this post we covered our plans to support databinding to the contents of a DbSet&amp;lt;T&amp;gt;, including existing data that is loaded from the database and new objects that haven&amp;rsquo;t been persisted to the database yet. We saw that two way databinding is supported in both WPF and WinForms. We also covered the new Load extension method that is used to materialize the results of a LINQ query into object instances prior to databinding. We&amp;rsquo;d like to hear any feedback you have on the proposed patterns or API surface.&lt;/p&gt;
&lt;p&gt;Rowan Miller &lt;br /&gt;Program Manager &lt;br /&gt;ADO.Net Entity Framework Team&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10059488" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Evolving+APIs/">Evolving APIs</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/ObjectServices/">ObjectServices</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/What_2700_s+New/">What's New</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Productivity+Improvements/">Productivity Improvements</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Code+First/">Code First</category></item><item><title>Productivity Improvements for the Entity Framework</title><link>http://blogs.msdn.com/b/efdesign/archive/2010/06/21/productivity-improvements-for-the-entity-framework.aspx</link><pubDate>Tue, 22 Jun 2010 00:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10028259</guid><dc:creator>dpblogs</dc:creator><slash:comments>51</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=10028259</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2010/06/21/productivity-improvements-for-the-entity-framework.aspx#comments</comments><description>&lt;h1 style="margin: 24pt 0in 0pt;"&gt;&lt;span style="mso-fareast-font-family: 'Times New Roman';"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Cambria;"&gt;Background&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;We&amp;rsquo;ve been hearing a lot of good feedback on the recently released update to the Entity Framework in .NET 4.&amp;nbsp;This release marks a significant advancement from the first release that shipped with .NET 3.5 SP1.&amp;nbsp; I&amp;rsquo;m not going to spend time here talking about what&amp;rsquo;s new, but you can &lt;/span&gt;&lt;a href="http://blogs.msdn.com/b/efdesign/archive/2010/04/12/announcing-the-release-of-entity-framework-4.aspx"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;check here&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt; to see for yourself.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;With all that said, there are still a number of things we can do to simplify the process of writing data access code with the Entity Framework.&amp;nbsp;We&amp;rsquo;ve been paying attention to the most common patterns that we see developers using with the EF and have been brewing up a set of improvements to the Entity Framework designed to allow developers to accomplish the same tasks with less code and fewer concepts.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;These improvements provide a cleaner and simpler API surface that focuses your attention on the most common scenarios but still allows you to drill down to more advanced functionality when it&amp;rsquo;s needed.&amp;nbsp; We hope you will enjoy this simpler experience, but we should be quick to assure you that this is NOT a new data access technology.&amp;nbsp; These improvements are built on the same technology for mapping, LINQ, providers and every other part of the Entity Framework.&amp;nbsp; Think of this as a fast path to writing data access code using conventions over configuration, better tuned APIs and other techniques intended to reduce development time when using the EF.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;At this stage we have worked through what we think the core API and functionality should look like and would like your feedback. There are still some capabilities such as data binding and concurrency resolution which will cause the API to evolve as we continue the design process, but the main concepts are in place, so it is a good time for feedback.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;h1 style="margin: 24pt 0in 0pt;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Cambria;"&gt;&lt;span style="mso-fareast-font-family: 'Times New Roman';"&gt;Introducing DbContext &amp;amp; DbSet&lt;/span&gt;&lt;span style="color: #376092; mso-fareast-font-family: 'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;At the heart of the Entity Framework Productivity Improvements are two new types, DbContext and DbSet&amp;lt;TEntity&amp;gt;. DbContext is a simplified alternative to ObjectContext and is the primary object for interacting with a database using a specific model. DbSet&amp;lt;TEntity&amp;gt; is a simplified alternative to ObjectSet&amp;lt;TEntity&amp;gt; and is used to perform CRUD operations against a specific type from the model. These new types can be used regardless of whether you created your model using the Entity Designer or code.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The obvious question is &amp;lsquo;Why not just simplify ObjectContext and ObjectSet&amp;lt;T&amp;gt;?&amp;rsquo; &amp;nbsp;We are opting to introduce these new types in order to, on the one hand, preserve full backward compatibility with existing EF applications and continue to address all of the advanced scenarios that are possible given the EF&amp;rsquo;s existing flexibility, while on the other hand streamlining the experience of using the EF and tuning it for the most common cases.&amp;nbsp; We believe it is critical that the EF programming experience improve in some fundamental ways, and at the same time we are absolutely committed to our existing customers. &amp;nbsp;Establishing a collaborative relationship between the existing types and the new types allows us to achieve both requirements.&amp;nbsp; Also, there are easy ways to get to ObjectContext and ObjectSet&amp;lt;T&amp;gt; from DbContext and DbSet in case you want more control for a particular task. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;One point we want to be very clear about is that these new types are not replacing any existing types; they are a simplified alternative that build on the existing types, and as we add features to the Entity Framework they will always be available in ObjectContext/ObjectSet, and they will also be available in DbContext/DbSet if appropriate.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;We&amp;rsquo;ll drill into the API surface later, but first let&amp;rsquo;s take a look at the coding experience using these new types.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0in 0pt;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Cambria;"&gt;Code First Experience&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;DbContext provides a simplified Code First pattern that requires less code and takes care of some common concerns such as model caching, database provisioning, schema creation and connection management. This simplified pattern uses a number of conventions to take care of these tasks and allows tweaking or overriding of this behavior when required. Let&amp;rsquo;s start off by using these conventions to write the code needed to build a console application that performs data access using a model:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;em&gt;&lt;strong&gt;A Visual Basic version of these code samples&amp;nbsp;is available &lt;a href="http://blogs.msdn.com/b/vbteam/archive/2010/06/21/productivity-improvements-for-the-entity-framework.aspx" title="here"&gt;here&lt;/a&gt;.&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;em&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;em&gt;&lt;strong&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;br /&gt;using&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System.Collections.Generic;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;using&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; System.Data.Entity;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;namespace&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; MyDataAccessDemo&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Program&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color: blue;"&gt;string&lt;/span&gt;[] args)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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;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: #2b91af;"&gt;ProductContext&lt;/span&gt;())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; food = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Category&lt;/span&gt; { CategoryId = &lt;span style="color: #a31515;"&gt;"FOOD"&lt;/span&gt; };&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.Categories.Add(food);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; cheese = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Product&lt;/span&gt; { Name = &lt;span style="color: #a31515;"&gt;"Cheese"&lt;/span&gt; };&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cheese.Category = context.Categories.Find(&lt;span style="color: #a31515;"&gt;"FOOD"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.Products.Add(cheese);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.SaveChanges();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ProductContext&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;DbContext&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DbSet&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Product&lt;/span&gt;&amp;gt; Products { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DbSet&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Category&lt;/span&gt;&amp;gt; Categories { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Product&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; ProductId { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Category&lt;/span&gt; Category { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Category&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; CategoryId { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ICollection&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Product&lt;/span&gt;&amp;gt; Products { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;That is 100% of the code you would write to get this program running. No separate model definition, XML metadata, config file or anything else is required. Conventions are used to fill in all of this information. Obviously there is quite a bit going on under the covers so let&amp;rsquo;s take a closer look at some of the things DbContext is doing automatically. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;Model Discovery &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;During construction we scan the derived context for DbSet properties and include the types in the model. Model Discovery uses the existing Code First functionality so the new &lt;/span&gt;&lt;a href="http://blogs.msdn.com/b/efdesign/archive/2010/06/01/conventions-for-code-first.aspx"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;default conventions&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt; we recently blogged about are processed during discovery. You can opt out of set discovery by specifying an attribute on the set properties that should be ignored.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;Of course there will be times when you want to further describe a model or change what was detected by convention. For example say you have a Book entity whose ISBN property is the primary key, this won&amp;rsquo;t be detected by convention. There are two options here; you can use &lt;/span&gt;&lt;a href="http://blogs.msdn.com/b/efdesign/archive/2010/03/30/data-annotations-in-the-entity-framework-and-code-first.aspx"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;data annotations&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt; to annotate the property in your class definition:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Book&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color: #2b91af;"&gt;Key&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; ISBN { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Title { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Alternatively DbContext includes a virtual method that can be overridden to use the Code First fluent API on ModelBuilder to further configure the model:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ProductContext&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;DbContext&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DbSet&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Book&lt;/span&gt;&amp;gt; Books { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnModelCreating(&lt;span style="color: #2b91af;"&gt;ModelBuilder&lt;/span&gt; modelBuilder)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;modelBuilder.Entity&amp;lt;&lt;span style="color: #2b91af;"&gt;Book&lt;/span&gt;&amp;gt;().HasKey(b =&amp;gt; b.ISBN);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;Model Caching&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;There is some cost involved in discovering the model, processing Data Annotations and applying fluent API configuration. To avoid incurring this cost every time a derived DbContext is instantiated the model is cached during the first initialization. The cached model is then re-used each time the same derived context is constructed in the same AppDomain. Model caching can be turned off by setting the CacheForContextType property on ModelBuilder to &amp;lsquo;false&amp;rsquo; in the OnModelCreating method.&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;DbSet Initialization&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;You&amp;rsquo;ll notice in the sample that we didn&amp;rsquo;t assign a value to either of the DbSet properties on the derived context. During construction DbContext will scan the derived context for DbSet properties and, if they expose a public setter, will construct a new DbSet and assign it to the property. You can opt out of set initialization by specifying an attribute on the set properties that should not be initialized.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;You can also create DbSet instances using the DbContext.Set&amp;lt;TEntity&amp;gt;() method if you don&amp;rsquo;t want to expose public setters for the DbSet properties.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;Database Provisioning&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;By default the database is created and provisioned using SqlClient against localhost\SQLEXPRESS and has the same name as the derived context. This convention is configurable and is controlled by an AppDomain setting that can be tweaked or replaced. You can tweak the default SqlClient convention to connect to a different database, replace it with a SqlCe convention that we include or define your own convention by implementing the IDbConnectionFactory interface. &lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IDbConnectionFactory&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;DbConnection&lt;/span&gt; CreateConnection(&lt;span style="color: blue;"&gt;string&lt;/span&gt; databaseName);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The active IDbConnectionFactory can be retrieved or set via the static property, Database.DefaultConnectionFactory.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;DbContext also includes a constructor that accepts a string to control the value that is passed to the convention, the SqlClient and SqlCE factories allow you to specify either a database name or the entire connection string.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Before calling the convention, DbContext will check in the app/web.config file for a connection string with the same name as your context (or the string value if you used the constructor that specifies a string). If there is a matching entry, we will use that rather than calling the convention. Because connection string entries also include provider information this allows you to target multiple providers in one application.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Finally, if you want full control over your connections there is a constructor on DbContext that accepts a DbConnection.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0in 0pt;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Cambria;"&gt;Database First and Model First Experience&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;In the latest version of the Entity Framework that shipped with .Net Framework 4.0 and Visual Studio 2010 we introduced T4 based code generation. T4 allows you to customize the code that is generated based on a model you have defined using the designer in either the Database First or Model First approach. The default template generates a derived ObjectContext with an ObjectSet&amp;lt;T&amp;gt; for each entity set in your model. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The productivity improvements will also include a template that generates a derived DbContext with a DbSet&amp;lt;TEntity&amp;gt; for each entity set in your model. This allows Model First and Database First developers to make use of the simplified API surface described in the next section.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0in 0pt;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Cambria;"&gt;API Surface&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;DbContext is the starting point for interacting with your model. Compared to ObjectContext it has a greatly reduced number of methods and properties that are exposed at the root level. The aim is to expose only the most commonly used methods on DbContext and have the ability to drill down to more advanced APIs. One example of this is the Database property that exposes database related APIs. We will add a couple more members as we work through adding the rest of the advanced functionality but we want to keep it as minimal as possible. In most cases you would work with a context that derives from DbContext and exposes strongly typed DbSet properties for the types in your model.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DbContext&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;IDisposable&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; DbContext(&lt;span style="color: #2b91af;"&gt;DbModel&lt;/span&gt; model,&lt;span style="color: blue;"&gt; string&lt;/span&gt; nameOrConnectionString);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; DbContext(&lt;span style="color: #2b91af;"&gt;DbModel&lt;/span&gt; model,&lt;span style="color: #2b91af;"&gt; DbConnection&lt;/span&gt; existingConnection); &lt;br /&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; DbContext(&lt;span style="color: #2b91af;"&gt;ObjectContext&lt;/span&gt; objectContext);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;protected&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; DbContext();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt; DbContext(&lt;span style="color: blue;"&gt;string&lt;/span&gt; nameOrConnectionString);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt; DbContext(&lt;span style="color: #2b91af;"&gt;DbConnection&lt;/span&gt; existingConnection); &lt;s&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Database&lt;/span&gt; Database { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ObjectContext&lt;/span&gt; ObjectContext { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnModelCreating(&lt;span style="color: #2b91af;"&gt;ModelBuilder&lt;/span&gt; modelBuilder);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; SaveChanges();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DbSet&lt;/span&gt;&amp;lt;TEntity&amp;gt; Set&amp;lt;TEntity&amp;gt;() &lt;span style="color: blue;"&gt;where&lt;/span&gt; TEntity : &lt;span style="color: blue;"&gt;class&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Dispose();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;DbModel Constructors&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;These constructors can be used with Database First, Model First and Code First development. They are used by our T4 template for Database First and Model First Development and can also be used in Code First scenarios where a model is built externally using ModelBuilder.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Code First previously contained a ContextBuilder type which we have now split into two components, ModelBuilder and DbModel. ModelBuilder is mutable and exposes the fluent API for defining your model. ModelBuilder creates an immutable DbModel type that can be used to construct an ObjectContext or DbContext. DbModel can also be constructed from a Database First or Model First approach where an edmx file is generated.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;ObjectContext Constructor&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;If you have an existing code base that uses ObjectContext and want to make use of the alternate surface of DbContext in some parts of your code then this constructor allows you to wrap the ObjectContext with the simpler surface.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;Protected Constructors&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The three protected constructors can be exposed or used within a derived context where you want to make use of the simplified Code First experience which was explained in the &amp;lsquo;Code First Experience&amp;rsquo; section. They are protected because the model discovery, database provisioning and model caching mechanisms rely on having a derived context.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;Database&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The Database property exposes an instance of the new Database type that contains methods for interacting with the underlying database. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Database&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DbConnection&lt;/span&gt; Connection { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Create ();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; CreateIfNotExists();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; Exists();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; Exists(&lt;span style="color: blue;"&gt;string&lt;/span&gt; nameOrConnectionString);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; Exists(&lt;span style="color: #2b91af;"&gt;DbConnection&lt;/span&gt; existingConnection);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Delete ();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Delete (&lt;span style="color: blue;"&gt;string&lt;/span&gt; nameOrConnectionString);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Delete (&lt;span style="color: #2b91af;"&gt;DbConnection&lt;/span&gt; existingConnection);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; DeleteIfExists();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; DeleteIfExists(&lt;span style="color: blue;"&gt;string&lt;/span&gt; nameOrConnectionString);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; DeleteIfExists(&lt;span style="color: #2b91af;"&gt;DbConnection&lt;/span&gt; existingConnection);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;ObjectContext&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;DbContext uses an ObjectContext internally and we make this available as a protected property just in case you ever need to drop down to the lower level API. You can use or expose the required functionality from a derived DbContext.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;OnModelCreating&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;This protected member can be overridden when defining a derived context in CodeFirst development and allows you tweak the shape of your model that was detected by convention.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;SaveChanges&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;This method exposes the same functionality as SaveChanges on ObjectContext and persists all pending changes to the database. It represents the Unit of Work for the context.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;Set&amp;lt;TEntity&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;This method will create a DbSet&amp;lt;TEntity&amp;gt; for an entity type that is part of your model, similar to CreateObjectSet&amp;lt;T&amp;gt; on ObjectContext. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;DbSet represents a collection of a given entity type in your model, similar to ObjectSet&amp;lt;T&amp;gt; except that this new type also supports derived types whereas ObjectSet&amp;lt;T&amp;gt; only supported base types.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DbSet&lt;/span&gt;&amp;lt;TEntity&amp;gt; : &lt;span style="color: #2b91af;"&gt;IDbSet&lt;/span&gt;&amp;lt;TEntity&amp;gt;, &lt;span style="color: #2b91af;"&gt;IQueryable&lt;/span&gt;&amp;lt;TEntity&amp;gt; &lt;span style="color: blue;"&gt;where&lt;/span&gt; TEntity : &lt;span style="color: blue;"&gt;class&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Add(TEntity entity); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Remove(TEntity entity);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Attach(TEntity entity);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; TEntity Find(&lt;span style="color: blue;"&gt;params&lt;/span&gt; &lt;span style="color: blue;"&gt;object&lt;/span&gt;[] keyValues);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoSubtitle"&gt;&lt;em&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;&lt;span style="font-size: small;"&gt;Add, Remove &amp;amp; Attach&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Add, Remove and Attach are similar to AddObject, DeleteObject and Attach on ObjectSet&amp;lt;T&amp;gt;. We&amp;rsquo;ve renamed Add and Remove to keep DbSet&amp;lt;TEntity&amp;gt; consistent with other sets in the framework. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Add and Attach can now be called on objects that are already tracked by the context, Add will ensure the object is in the added state and Attach the unchanged state. This is helpful in N-Tier and Web scenarios where you have a detached graph containing both existing and new entities that need to be hooked up to the context. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;For example assume you have a new product that is linked to an existing category, neither instance is attached to a context (they may have been returned from a distributed client via a web service call or built from a post back in a web application). Because Add and Attach are graph operations, calling Add on the product will also Add the category. Previously you would need to drop down to lower level APIs (ObjectStateManager.ChangeObjectState) to mark the category as unchanged. Now however this can be achieved by calling Attach:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; AddProduct(&lt;span style="color: #2b91af;"&gt;Product&lt;/span&gt; product)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&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: #2b91af;"&gt;ProductContext&lt;/span&gt;())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.Products.Add(product);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.Categories.Attach(product.Category);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;context.SaveChanges();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoSubtitle"&gt;&lt;em&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;&lt;span style="font-size: small;"&gt;Find&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;The new Find method will locate an object with the supplied primary key value(s). Find initially checks the in-memory objects before querying the database and is capable of finding added entities that haven&amp;rsquo;t been persisted to the store yet. If find doesn&amp;rsquo;t locate an entity with the matching key it returns null.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style="margin: 10pt 0in 0pt;"&gt;&lt;span style="color: #4f81bd;"&gt;&lt;span style="font-family: Cambria;"&gt;&lt;span style="font-size: small;"&gt;IDbSet&amp;lt;TEntity&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;DbSet&amp;lt;TEntity&amp;gt; implements IDbSet&amp;lt;TEntity&amp;gt; to facilitate building testable applications.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IDbSet&lt;/span&gt;&amp;lt;TEntity&amp;gt; : &lt;span style="color: #2b91af;"&gt;IQueryable&lt;/span&gt;&amp;lt;TEntity&amp;gt; &lt;span style="color: blue;"&gt;where&lt;/span&gt; TEntity : &lt;span style="color: blue;"&gt;class&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt; Add(TEntity entity);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt; Attach(TEntity entity);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt; Remove(TEntity entity); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TEntity Find(&lt;span style="color: blue;"&gt;params&lt;/span&gt; &lt;span style="color: blue;"&gt;object&lt;/span&gt;[] keyValues);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;IDbSet&amp;lt;TEntity&amp;gt; allows you to define an interface that can be implemented by your derived context, similar to the example shown below. This allows the context to be replaced with an in-memory test double for testing. DbContext will still perform set discovery and initialization, described in the &amp;lsquo;Code First Development&amp;rsquo; section, for properties typed as IDbSet&amp;lt;TEntity&amp;gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IProductContext&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IDbSet&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Product&lt;/span&gt;&amp;gt; Products { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IDbSet&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Category&lt;/span&gt;&amp;gt; Categories { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ProductContext&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;DbContext&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;IProductContext&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IDbSet&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Product&lt;/span&gt;&amp;gt; Products { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IDbSet&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Category&lt;/span&gt;&amp;gt; Categories { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0in 0pt;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Cambria;"&gt;Summary&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;These improvements are designed to provide a cleaner and simpler API surface that allows you to achieve common scenarios with ease while also allowing you to drill down to more advanced functionality when required. The improvements build on top of the existing Entity Framework components using conventions over configuration and a simplified API surface.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;We&amp;rsquo;d like to hear any feedback you have on the proposed functionality and API surface.&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Rowan Miller&lt;br /&gt;Program Manager&lt;br /&gt;ADO.NET Entity Framework Team&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10028259" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Evolving+APIs/">Evolving APIs</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Model+First/">Model First</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/ObjectServices/">ObjectServices</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/CodeOnly/">CodeOnly</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/What_2700_s+New/">What's New</category></item><item><title>Conventions for Code First</title><link>http://blogs.msdn.com/b/efdesign/archive/2010/06/01/conventions-for-code-first.aspx</link><pubDate>Tue, 01 Jun 2010 20:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10018450</guid><dc:creator>dpblogs</dc:creator><slash:comments>48</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=10018450</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2010/06/01/conventions-for-code-first.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;The &lt;/span&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=af18e652-9ea7-478b-8b41-8424b94e3f58&amp;amp;displayLang=en"&gt;&lt;span style="font-family: Calibri; color: #0000ff; font-size: small;"&gt;latest preview of Code First&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt; allows you to describe a model using C# or VB.Net classes. The basic shape of the model is detected by convention and then a fluent API can be used to further refine your model. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;We recently posted about our &lt;/span&gt;&lt;a href="http://blogs.msdn.com/b/efdesign/archive/2010/03/30/data-annotations-in-the-entity-framework-and-code-first.aspx"&gt;&lt;span style="font-family: Calibri; color: #0000ff; font-size: small;"&gt;plans to support Data Annotations&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt; as another way to further describe your model. We are now looking at extending and improving the conventions that initially infer the shape of the model. This post describes the conventions we are planning to include.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Conventions are designed to provide a starting point for a model. Data Annotations or the fluent API can then be used to further describe the model or change what was detected by convention. Precedence is given to configuration via the fluent API followed by Data Annotations then convention. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0in 0pt;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Cambria;"&gt;Primary Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Previously Code First would infer that a property is a primary key if the property is called &amp;lsquo;Id&amp;rsquo; or &amp;lsquo;&amp;lt;class name&amp;gt;Id&amp;rsquo;. The only change to this convention is that once primary key properties are detected if their type is &amp;lsquo;int&amp;rsquo;, &amp;lsquo;long&amp;rsquo; or &amp;lsquo;short&amp;rsquo;, they are registered as identity columns in the database by default. Primary key detection is not case sensitive.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0in 0pt;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Cambria;"&gt;Relationship Inverses&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;When defining a relationship between two types it is common to include a navigation property on both types, such as in the following example:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;o:p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Product&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; ProductId { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Category&lt;/span&gt; Category { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Category&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; CategoryId { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ICollection&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Product&lt;/span&gt;&amp;gt; Products { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;p class="MsoNormal"&gt;Previously Code First would create two separate relationships between Product and Category but will now infer that Product.Category and Category.Products represent different ends of the same relationship. Inverse detection will occur when both types involved in the relationship define one and only one navigation property (reference to or collection) to each other. If one of the types in a relationship defines two or more navigation properties that reference the other type then inverse detection will not occur and the relationships will need to be manually configured using &lt;a href="http://blogs.msdn.com/b/efdesign/archive/2010/03/30/data-annotations-in-the-entity-framework-and-code-first.aspx"&gt;&lt;span style="color: #0000ff;"&gt;Data Annotations&lt;/span&gt;&lt;/a&gt; or the fluent API.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;h1 style="margin: 24pt 0in 0pt;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Cambria;"&gt;Foreign Keys&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;Building on the previous convention it is also common to include a foreign key property on the dependent end of a relationship, in this case BookReview.SubjectISBN:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;BookReview&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Id { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Book&lt;/span&gt; Subject { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; SubjectISBN { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Book&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color: #2b91af;"&gt;Key&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; ISBN { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ICollection&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;BookReview&lt;/span&gt;&amp;gt; Reviews { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Code First will now infer that any property named &amp;lsquo;&amp;lt;navigation property name&amp;gt;&amp;lt;primary key property name&amp;gt;&amp;rsquo; (i.e. SubjectISBN), &amp;lsquo;&amp;lt;principal class name&amp;gt;&amp;lt;primary key property name&amp;gt;&amp;rsquo; (i.e. BookISBN) or &amp;lsquo;&amp;lt;primary key property name&amp;gt;&amp;rsquo; (i.e. ISBN), with the same data type as the primary key, represents a foreign key for the relationship. If multiple matches are found then precedence is given in the order listed above. Foreign key detection will not be case sensitive.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;When a foreign key property is detected Code First will also infer the multiplicity of the relationship based on the nullability of the foreign key, if the property is nullable then the relationship is registered as optional, otherwise the relationship is registered as required, and cascade delete is turned on. The multiplicity and cascade delete behavior detected by convention can be overridden using the fluent API.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0in 0pt;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Cambria;"&gt;Type Discovery&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;Previously Code First would only include types that were declared in object sets on your derived context or manually registered through the fluent API. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;Given the following example Product would have been included in your model, but Category would not:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ProductContext&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;ObjectContext&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; ProductContext(&lt;span style="color: #2b91af;"&gt;EntityConnection&lt;/span&gt; connection)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;: &lt;span style="color: blue;"&gt;base&lt;/span&gt;(connection)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{ }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ObjectSet&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Product&lt;/span&gt;&amp;gt; Products&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.CreateObjectSet&amp;lt;&lt;span style="color: #2b91af;"&gt;Product&lt;/span&gt;&amp;gt;(); }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Product&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Id { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Category&lt;/span&gt; Category { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Category&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Id { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ICollection&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Product&lt;/span&gt;&amp;gt; Products { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Code First will now recognize that Product has a property that references Category and automatically include Category in your model. Reachability is recursive, so if Category then referenced another unregistered type, this would also be included in the model. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;Reachability will also follow references to types defined in another assembly. The convention may include types that do not belong in the model; these can be removed using the StoreIgnore Data Annotation or via the fluent API as follows:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;var&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; builder = &lt;span style="color: blue;"&gt;new&lt;/span&gt; ContextBuilder&amp;lt;&lt;span style="color: #2b91af;"&gt;ProductContext&lt;/span&gt;&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;builder.Ignore&amp;lt;&lt;span style="color: #2b91af;"&gt;Category&lt;/span&gt;&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0in 0pt;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Cambria;"&gt;Complex Type Discovery&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;Building on the reachability convention, if Code First discovers a class definition where a primary key cannot be inferred, and no primary key is registered through &lt;a href="http://blogs.msdn.com/b/efdesign/archive/2010/03/30/data-annotations-in-the-entity-framework-and-code-first.aspx"&gt;&lt;span style="color: #0000ff;"&gt;Data Annotations&lt;/span&gt;&lt;/a&gt; or the fluent API, then the type will be automatically registered as a complex type. Complex type detection also requires that the type does not have properties that reference entity types and is not referenced from a collection property on another type. Given the following class definitions Code First would infer that Name is a complex type because it has no primary key:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; PersonId { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Name&lt;/span&gt; Name { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue; font-size: 9.5pt;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Name&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Title { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; FirstName { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; LastName { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0in 0pt;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="color: #365f91;"&gt;&lt;span style="font-family: Cambria;"&gt;Summary&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;Code First will provide an extended set of default conventions to determine the shape of a model. These conventions can be overridden using &lt;a href="http://blogs.msdn.com/b/efdesign/archive/2010/03/30/data-annotations-in-the-entity-framework-and-code-first.aspx"&gt;&lt;span style="color: #0000ff;"&gt;Data Annotations&lt;/span&gt;&lt;/a&gt; which in turn can be overridden via the fluent API. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;We&amp;rsquo;d like to hear any feedback you have on the set of conventions as well as the rules associated with each convention.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Rowan Miller&lt;br /&gt;Program Manager&lt;br /&gt;ADO.Net Entity Framework Team&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10018450" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Mapping/">Mapping</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Evolving+APIs/">Evolving APIs</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/ObjectServices/">ObjectServices</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/FKs/">FKs</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/CodeOnly/">CodeOnly</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/What_2700_s+New/">What's New</category></item><item><title>Announcing the release of Entity Framework 4</title><link>http://blogs.msdn.com/b/efdesign/archive/2010/04/12/announcing-the-release-of-entity-framework-4.aspx</link><pubDate>Mon, 12 Apr 2010 16:17:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9994448</guid><dc:creator>dpblogs</dc:creator><slash:comments>16</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=9994448</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2010/04/12/announcing-the-release-of-entity-framework-4.aspx#comments</comments><description>&lt;p&gt;The first release of Entity Framework shipped in .NET Framework 3.5 SP1 and Visual Studio 2008. Since then, we have been focused on incorporating your feedback and enabling the scenarios that you wanted us to work on. &lt;/p&gt;  &lt;p&gt;The feedback we have received through the betas and release candidate has been instrumental in helping us to get to where we are today; so thank you very much for being a part of the development process.&lt;/p&gt;  &lt;p&gt;Today, we are happy to announce the release of Entity Framework 4 as part of the release of Visual Studio 2010 and .NET Framework 4. &lt;/p&gt;  &lt;p&gt;Entity Framework 4 builds on Entity Framework 3.5 in the following areas:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;u&gt;Development Approach / Design-time Improvements&lt;/u&gt;&lt;/h3&gt;  &lt;p&gt;&lt;b&gt;Model-First Development: &lt;/b&gt;In addition to the &lt;i&gt;Database-First&lt;/i&gt; approach you had in EF 3.5, Entity Data Model designer in Visual Studio 2010 includes &lt;i&gt;Model-First &lt;/i&gt;capability to allow you to start from a model, and generate database based on that model. Read more about this feature &lt;a href="http://blogs.msdn.com/adonet/archive/2009/11/05/model-first-with-the-entity-framework-4.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Customizable Code-Generation: &lt;/b&gt;EF4 leverages the T4 code generation templating engine in Visual Studio. You can now write your own templates that specify exactly how you want code generation to happen; or you can modify the built-in templates such as the Entity Object Code Generator or Self Tracking Entities Code Generator templates. Read more about this feature &lt;a href="http://blogs.msdn.com/adonet/archive/2009/05/19/sneak-peek-using-code-generation-templates-with-the-entity-framework-4-0.aspx"&gt;here&lt;/a&gt;. We have also shipped a POCO Template as a separate download available on the Visual Studio Extensions Gallery. Read more about this POCO Template &lt;a href="http://blogs.msdn.com/adonet/pages/walkthrough-poco-template-for-the-entity-framework.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Design-time support for Complex Types (with refactoring): &lt;/b&gt;Entity Data Model Designer in VS 2010 lets you define complex types, view complex types in the model explorer tree and refactor existing properties into complex type.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Pluralization: &lt;/b&gt;There is now Singularization/Pluralization support such that reverse engineering existing databases will result in models that have more meaningful names for entity types, entity sets and relationships. Read more about this feature &lt;a href="http://blogs.msdn.com/adonet/archive/2009/05/20/sneak-preview-pluralization-in-entity-framework-4-0.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Multi-Targeting Support: &lt;/b&gt;Entity Data Model Designer and Entity Framework fully support Multi-Targeting capabilities of VS 2010. You can use the designer to continue building your EF 3.5 applications or move forward to EF4. We take care of upgrading / downgrading you to the right EDMX versions and such so that you can use a single IDE to build apps using EF, regardless of the framework version you are targeting.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;u&gt;Architectural Concerns &amp;amp; Patterns&lt;/u&gt;&lt;/h3&gt;  &lt;p&gt;&lt;b&gt;Persistence Ignorance &amp;amp; POCO: &lt;/b&gt;EF4 allows developers to use their pure domain classes without needing to implement interfaces that deal with persistence concerns. Dynamic proxies are supported for lazy loading and efficient change tracking. Read more about this feature &lt;a href="http://blogs.msdn.com/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx"&gt;here&lt;/a&gt;.&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Self-Tracking Entities &amp;amp; N-Tier support: &lt;/b&gt;Visual Studio 2010 includes code-generation templates for Self Tracking Entities that allow you to easily build N-Tier applications. There are also new APIs in the product that offer you more control in N-Tier scenarios. Read more about this feature &lt;a href="http://msdn.microsoft.com/en-us/library/ee789839(v=VS.100).aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Application Patterns and Testability: &lt;/b&gt;EF4 includes an additional interface to help you to write testable code when using the framework. In addition, we have made sure that use of patterns such as Repository and UnitOfWork are possible. &lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;u&gt;Data Access Features&lt;/u&gt;&lt;/h3&gt;  &lt;p&gt;&lt;b&gt;Foreign Key Associations: &lt;/b&gt;EF4 includes a new type of association called Foreign Key Association. FK associations allow you to include FK properties in your model and use those as a basis for relationship between entities. Independent Associations from EF 3.5 are still supported but FK Associations will help simplify a few scenarios such as data binding. You can now include foreign keys in your model should you choose to do so. Read more about this feature &lt;a href="http://blogs.msdn.com/adonet/archive/2009/11/06/foreign-key-relationships-in-the-entity-framework.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Lazy Loading: &lt;/b&gt;There is now support for automatic Lazy loading. All new projects created using the Entity Designer in Visual Studio 2010 will also have automatic lazy loading enabled by default. &lt;i&gt;Upgraded projects will require this to be explicitly enabled, so that the behavior of your existing projects is preserved unless you explicitly choose to take advantage of this functionality. &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;More LINQ Operators in LINQ to Entities: &lt;/b&gt;More LINQ operators are supported by EF4 such as &lt;i&gt;Contains&lt;/i&gt;,&lt;i&gt; Single&lt;/i&gt;, &lt;i&gt;SingleOrDefault&lt;/i&gt; and &lt;i&gt;DefaultIfEmpty&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;CreateDatabase and DDL Provider Services: &lt;/b&gt;EF4 includes APIs on ObjectContext that allow you to do database creation based on a model. Provider writers can implement DDL generation capability in their providers that can take advantage of this capability. Read more about this feature &lt;a href="http://blogs.msdn.com/efdesign/archive/2009/10/06/extending-the-entity-framework-provider-model-to-support-ddl.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Model Defined Functions LINQ support:&lt;/b&gt; Model Defined Functions allow you to define composable functions in your model using Entity SQL. You can also expose these functions such that they can be used from LINQ. Read more about this feature &lt;a href="http://blogs.msdn.com/adonet/archive/2009/05/14/sneak-preview-model-defined-functions.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;EntityDataSource support for QueryExtender, POCO and FKs: &lt;/b&gt;EntityDataSource control now includes support for ASP.NET QueryExtender and POCO entities. QueryExtender is a new addition to ASP.NET, which allows you to have more control over the data retrieval query of a Data Source while leveraging LINQ capabilities of EF.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;ObjectMaterialized&lt;/b&gt; &lt;b&gt;event&lt;/b&gt;: Now you can write logic that is executed immediately after an object has been materialized.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Generated SQL improvements for better performance and readability: &lt;/b&gt;EF4 includes a lot of optimizations to the queries generated by EF such as removal of unnecessary joins, better translations of certain functions, removal of unneeded levels of nesting, and more. Read more about this &lt;a href="http://blogs.msdn.com/adonet/archive/2009/08/05/improvements-to-the-generated-sql-in-net-4-0-beta1.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Ad-hoc native query support: &lt;/b&gt;EF4 supports more ad-hoc query patterns that allow you to run a store query or a command directly. Read more about this feature &lt;a href="http://msdn.microsoft.com/en-us/library/ee358758(v=VS.100).aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;There are many other smaller improvements we haven’t covered here. We hope that you find these features useful. Be sure to let us know what you think of EF4, and what you’d like to see us do next.&lt;/p&gt;  &lt;p&gt;Entity Framework Team&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9994448" width="1" height="1"&gt;</description></item><item><title>Data Annotations in the Entity Framework and Code First</title><link>http://blogs.msdn.com/b/efdesign/archive/2010/03/30/data-annotations-in-the-entity-framework-and-code-first.aspx</link><pubDate>Wed, 31 Mar 2010 05:14:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9987913</guid><dc:creator>dpblogs</dc:creator><slash:comments>46</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=9987913</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2010/03/30/data-annotations-in-the-entity-framework-and-code-first.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.aspx"&gt;Data annotation attributes&lt;/a&gt; were introduced in .NET 3.5 as a way to add validation to classes used &lt;font color="#008000"&gt;by &lt;/font&gt;ASP.NET applications. Since that time&lt;strike&gt;,&lt;/strike&gt; RIA Services has begun using data annotations and they are now &lt;a href="http://msdn.microsoft.com/en-us/library/dd901590(VS.95).aspx"&gt;part of Silverlight&lt;/a&gt;.&amp;#160; Code First allows you to build an EDM Entity Framework model using code (C# or VB.NET) and is now in its third &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=af18e652-9ea7-478b-8b41-8424b94e3f58&amp;amp;displayLang=en"&gt;CTP&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Feedback we’ve received from these CTPs shows demand for Code First to read data annotation attributes from class and property definitions to configure &lt;font color="#000000"&gt;aspects such as &lt;/font&gt;maximum string length, which properties are keys, or the table &lt;font color="#000000"&gt;name in which to store a type of entity. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;This post outlines which existing data annotation attributes we’ll adopt and which new attributes we are proposing. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;Using Data Annotations&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;When building a model using Code First, you start by writing a set of entity classes. For example: &lt;/p&gt;  &lt;blockquote&gt;&lt;font size="2" face="Courier New"&gt;public class Book&lt;/font&gt;     &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;{&lt;/font&gt;     &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public string ISBN { get; set; }&lt;/font&gt;     &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public string Title { get; set; }&lt;/font&gt;     &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public string AuthorSSN { get; set; }&lt;/font&gt;     &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public Person Author { get; set; }&lt;/font&gt;     &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;}&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;public class Person&lt;/font&gt;     &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;{&lt;/font&gt;     &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public string SSN { get; set; }&lt;/font&gt;     &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public string Name { get; set; }&lt;/font&gt;     &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public ICollection&amp;lt;Book&amp;gt; Books { get; set; }&lt;/font&gt;     &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;}&lt;/font&gt;&lt;br.&gt; &lt;/blockquote&gt;  &lt;p&gt;When using this class model with Code First in CTP3, you would need to use the fluent API to describe which properties are keys, which relationships exist, and the length of each string property if you wanted these to be constrained. These are very common tasks and we’d like users of Code First to be able to make these kinds of configuration without having to use the fluent API to describe the model. Using data annotation attributes, the above model characteristics can be made declaratively as part of the class definition: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="2" face="Courier New"&gt;public class Book&lt;/font&gt;       &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [Key]         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font size="2" face="Courier New"&gt;public string ISBN { get; set; }        &lt;br /&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font size="2" face="Courier New"&gt;[StringLength(256)]&lt;/font&gt;       &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public string Title { get; set; }        &lt;br /&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public string AuthorSSN { get; set; }&lt;/font&gt;       &lt;br /&gt;      &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; [RelatedTo(RelatedProperty=“Books”, Key=”AuthorSSN”, RelatedKey=”SSN”)]        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public Person Author { get; set; }         &lt;br /&gt;}         &lt;br /&gt;&lt;/font&gt;      &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;public class Person&lt;/font&gt;       &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;{&lt;/font&gt;       &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; [Key]&lt;/font&gt;       &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public string SSN { get; set; }&lt;/font&gt;       &lt;br /&gt;      &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; [StringLength(512)]&lt;/font&gt;       &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public string Name { get; set; }&lt;/font&gt;       &lt;br /&gt;      &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; [RelatedTo(RelatedProperty=”Author”)]&lt;/font&gt;       &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public ICollection&amp;lt;Book&amp;gt; Books { get; set; }&lt;/font&gt;       &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;}&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;Existing Data Annotation Attributes&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;There are several existing data annotation attributes in the System.ComponentModel.DataAnnotations namespace that can be used by Code First. These are: &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;i&gt;KeyAttribute&lt;/i&gt;&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;KeyAttribute is used to specify that a property/column is part of the primary key of the entity and applies to scalar properties only. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;i&gt;StringLengthAttribute&lt;/i&gt;&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;StringLengthAttribute is used to specify the maximum length of a string. As there is no minimum length in Code First or EF, the “MinimumLength” property on the attribute would be ignored. This attribute applies only to properties that are of type string. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;In .NET 4.0, a negative MaximumValue is not allowed&lt;strike&gt;.&lt;/strike&gt; but in the next version of the framework the recommendation is to change this behavior so that a value of ‘-1’ means “max”. This isn’t ideal, so another idea we are considering is to make a MaxStringLengthAttribute that derives from StringLengthAttribute. The MaxStringLengthAttribute wouldn’t take parameters, but would just assume the maximum allowable value. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;i&gt;ConcurrencyCheckAttribute&lt;/i&gt;&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;ConcurrencyCheckAttribute is used to specify that a property/column has a concurrency mode of “fixed” in the EDM model. A fixed concurrency mode means that this property is part of the concurrency check of the entity during save operations and applies to scalar properties only. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;i&gt;RequiredAttribute&lt;/i&gt;&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;RequiredAttribute is used to specify that a property/column is non-nullable and applies to scalar, complex, and navigation properties: &lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#000000"&gt;Scalar properties: means this property is non-nullable (even if the CLR type says it is nullable). &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#000000"&gt;Complex properties: the attribute is not allowed here so we would throw an exception &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#000000"&gt;Navigation properties &lt;/font&gt;      &lt;ul&gt;       &lt;li&gt;&lt;font color="#000000"&gt;Collection property: the attribute is not allowed here so we would throw an exception &lt;/font&gt;&lt;/li&gt;        &lt;li&gt;&lt;font color="#000000"&gt;Reference property: this means the backing FK property is non-null, and that the end of the association is cardinality “1” (instead of 0..1). &lt;/font&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;i&gt;TimestampAttribute&lt;/i&gt;&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;The TimestampAttribute is used to specify that a byte[] property/column has a concurrency mode of “fixed” in the model and that it should be treated as a timestamp column on the store model (non-nullable byte[] in the CLR type). This attribute applies to scalar properties of type byte[] only&lt;strike&gt;.&lt;/strike&gt; and only one TimestampAttribute can be present on an entity as this is what is allowed on most database platforms. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;i&gt;DataMemberAttribute&lt;/i&gt;&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;The DataMemberAttribute, while not strictly part of the data annotation collection, can be used to help specify the ordinal of primary keys. This is important on entities where there is a composite primary key and you want to make an assertion about the order the keys are specified on the database or are used in your application. This attribute applies only to scalar properties only that are part of the key. Ordinals do not need to be consecutive, they only specify the relative order of the key properties in metadata. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;Ideally we’d like to be able to specify the key order as part of the KeyAttribute via an “Ordinal” property, but we can’t make changes to KeyAttribute until the next release of the .NET framework. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;New Data Annotation Attributes&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;While the existing data annotation attributes provide many useful options for defining your model, there are still several common cases where we’d like to be able to make model changes with annotation attributes. Our goal with data annotation support in Code First is not to provide another way to completely specify a model, but to provide a mechanism that addresses the most common kinds of configurations that developers need to influence their model. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;em&gt;This is an area where it would be great to get early feedback so we can incorporate your ideas into our data annotation plan - below are descriptions of the annotation attributes we are proposing for Code First.&lt;/em&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;i&gt;RelatedToAttribute&lt;/i&gt;&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;The RelatedToAttribute is used for two things: &lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#000000"&gt;To assign bi-directionality to certain relationships where the built-in convention doesn’t detect it &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#000000"&gt;To associate a navigation property with its foreign key(s) &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font color="#000000"&gt;The RelatedToAttribute is placed on navigation properties and can be present on zero, one, or both ends of a relationship. There are a few parameters on the RelatedToAttribute: &lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#000000"&gt;A property to optionally specify the &lt;i&gt;RelatedProperty&lt;/i&gt; on the target type.         &lt;br /&gt;&lt;em&gt;This is to support bi directionality in relationships (Book.Author is related to Person.Books, for example). &lt;/em&gt;&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#000000"&gt;A property to optionally specify the keys on this entity that constrain the relationship.        &lt;br /&gt;&lt;em&gt;This can be either the primary key(s) if the attribute is on a navigation property on the principal end of a relationship, or the foreign key(s) if the attribute is on a navigation property on the dependent end of a relationship. &lt;/em&gt;&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#000000"&gt;A property to optionally specify the keys on the related entity that constrain the relationship.        &lt;br /&gt;&lt;em&gt;This can be either the primary key(s) if the attribute is on a navigation property on the dependent end of a relationship, or the foreign key(s) if the attribute is on a navigation property on the principal end of a relationship. &lt;/em&gt;&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#000000"&gt;A property to optionally specify cascade delete behavior.        &lt;br /&gt;&lt;em&gt;When this property is set to true and the principal entity is deleted, the dependent end of the relationship will also be deleted. &lt;/em&gt;&lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font color="#000000"&gt;In the example at the beginning of the blog post, the RelatedToAttribute was used to related the Book.Author and Person.Books navigation properties so that all of Book.AuthorSSN, Book.Author, and Person.Books represent the same relationship in the model. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;We also considered using the existing AssociationAttribute to specify relationships&lt;u&gt;.&lt;/u&gt; however this attribute assumes that there already is a backing model and requires a relationship name and required key properties which are not needed when&lt;strike&gt; &lt;/strike&gt;describing your model with Code First. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;i&gt;LengthAttribute&lt;/i&gt;&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;LengthAttribute can be used to specify the maximum length of an array type, such as a byte[] and applies only to properties. A value of ‘-1’ means “max” and all other negative values are not allowed. There is overlap here with the StringLengthAttribute: when the LengthAttribute is specified on a property of type string, the semantics will be the same as StringLengthAttribute. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;i&gt;StoreGeneratedAttribute&lt;/i&gt;&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;The StoreGeneratedAttribute can be used to specify that a property’s value is generated on the database store and the only store generated pattern supported in the first version is “identity”. This attribute applies to properties only and has a single optional nullable boolean property &lt;i&gt;Identity&lt;/i&gt;. A null value for &lt;i&gt;Identity&lt;/i&gt; means that no decision should be made for Identity: the convention or an explicit API call will be made to turn the identity pattern on or off. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;i&gt;StoreNameAttribute&lt;/i&gt;&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;The StoreNameAttribute can be used to specify a name for a store/database item. This attribute has different meanings depending on the kind of thing this attribute applies to: &lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#000000"&gt;If the attribute is on a context class, it means “database name”. &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#000000"&gt;If the attribute is on an entity class, it means “table name”. &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#000000"&gt;If the attribute is on a property in an entity class, it means “column name”. &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;i&gt;StoreIgnoreAttribute&lt;/i&gt;&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;StoreIgnoreAttribute can be used to specify that a CLR type or property should not be included when reading type or property metadata from a CLR type. This attribute can apply to classes, which means they should not be considered as an EntityType or ComplexType object but can also apply to properties, which means that property should not be part of the EntityType or ComplexType. We haven’t finalized the name of this attribute yet, so if you have suggestions, please let us know.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;i&gt;StoreInlineAttribute&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;StoreInlineAttribute can be used to specify that a CLR type should be considered as a ComplexType when reading type metadata from CLR types. Complex types can be thought of as a class without an identity/keys, or a logic grouping of properties (such as an Address or PhoneNumber) and applies only to class definitions. ComplexTypes are stored inline with the entity. We may choose not to include this attribute as the convention we are thinking of adding to Code First should detect most cases where a complex type is being used. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;Other Possibilities&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;There may be other kinds of model definition that you’d like to be able to do using data annotation attributes. Some other candidates are: &lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#000000"&gt;Being able to specify whether a string is unicode or not &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#000000"&gt;Being able to specify whether a type is variable or fixed length &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#000000"&gt;Having data annotation attributes put CSDL annotations in your model that other systems (such as OData) can read. An example of this is the RangeAttribute. &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#000000"&gt;Let us know if any of these options sound interesting or if there is something else you’d like us to consider. &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;Summary&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;Code First will offer a few different ways of configuring a model: purely by built-in conventions, using data&lt;/font&gt; annotation attributes to make certain kinds of model changes, or by using a fluent API to fully customize the model. To provide more flexibility over the existing data annotation attributes, we are adding new attributes that Code First can use. &lt;/p&gt;  &lt;p&gt;We’d like to hear your feedback on the set of attributes that are available and how Code First will use them. &lt;/p&gt;  &lt;p&gt;Jeff Derstadt    &lt;br /&gt;Entity Framework Team&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9987913" width="1" height="1"&gt;</description></item><item><title>POCO Template Code Generation Options</title><link>http://blogs.msdn.com/b/efdesign/archive/2010/03/10/poco-template-code-generation-options.aspx</link><pubDate>Thu, 11 Mar 2010 02:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9976605</guid><dc:creator>dpblogs</dc:creator><slash:comments>17</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=9976605</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2010/03/10/poco-template-code-generation-options.aspx#comments</comments><description>&lt;P&gt;We recently released an updated version of the &lt;A href="http://blogs.msdn.com/adonet/pages/entity-framework-poco-template-updated-for-visual-studio-2010-release-candidate.aspx" mce_href="http://blogs.msdn.com/adonet/pages/entity-framework-poco-template-updated-for-visual-studio-2010-release-candidate.aspx"&gt;POCO template&lt;/A&gt; that works with Visual Studio 2010 RC on the Visual Studio Gallery. In this post we will delve into the various possible code generation options for future releases of the POCO template. We hope that you will read the various options presented here and give us feedback about the most compelling features for you. &lt;/P&gt;
&lt;H3&gt;1. Template Versus Generate Once experience&lt;/H3&gt;
&lt;H4&gt;Template Experience (current design)&lt;/H4&gt;
&lt;P&gt;This experience is the same as what we currently have, where Text transform (.tt) files are added to the project either from the EDM Designer surface or the Solution Explorer. The generated code files are nested under the .tt files and are added to the project. This is useful in the following scenarios –&lt;/P&gt;
&lt;P&gt;· Your model is evolving, so you expect to regenerate your entities often&lt;/P&gt;
&lt;P&gt;· You have &lt;B&gt;&lt;I&gt;patterns &lt;/I&gt;&lt;/B&gt;of changes you want to make to your entities. This includes additional code you want included in each of your entities or modifying parts of the auto-generated code. &lt;/P&gt;
&lt;P&gt;An example of a patterned change would be to introduce a data value constraint check in the property setters of certain data types. More information about customizing T4 templates can be found in &lt;A href="http://blogs.msdn.com/adonet/archive/2009/07/22/customizing-t4-templates.aspx" mce_href="http://blogs.msdn.com/adonet/archive/2009/07/22/customizing-t4-templates.aspx"&gt;this&lt;/A&gt; blog post.&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;H4&gt;Generate once experience&lt;/H4&gt;
&lt;P&gt;This user experience would mean that you could generate entity classes from the ADO.NET Entity Data Model (.edmx file) by right clicking on it from the Solution Explorer and selecting “Generate Entities”. Instead of template files being added to your project, the resulting code files for the entities would be added to your project. In future if the model changes, the entity classes will not be regenerated. These are the scenarios where this experience would be useful – &lt;/P&gt;
&lt;P&gt;· You are working with a legacy database and don’t plan to evolve your model frequently. In this case it is only required to generate the entities once.&lt;/P&gt;
&lt;P&gt;· After generating once, you expect to customize your entities with business logic or code that is &lt;B&gt;&lt;I&gt;specific&lt;/I&gt;&lt;/B&gt; to each entity type, and not a pattern of changes.&lt;/P&gt;
&lt;P&gt;In these scenarios generate once is a seamless, VS integrated way of creating entity classes. The code generation would still use T4 templates behind the scenes. We can potentially support additional features in this scenario like customizing the generated code by choosing which features you want (details follow in the next sections). We would take your input through a VS dialog and feed it to the templates to generate the code your application requires. &lt;/P&gt;
&lt;H3&gt;2. Full featured versus Basic POCOs&lt;/H3&gt;
&lt;P&gt;These are the features that can be added to the basic POCO entities -&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Proxies – For change tracking and lazy loading &lt;/LI&gt;
&lt;LI&gt;Fixup logic in entities – Ensures that the object graph remains connected even when EF is not present &lt;/LI&gt;
&lt;LI&gt;WCF Serialization support – Adds DataContractAttribute, DataMemberAttribute and KnownTypeAttributes to the entities and its members &lt;/LI&gt;
&lt;LI&gt;Data binding support – Entities implement INotifyPropertyChanged interface &lt;/LI&gt;
&lt;LI&gt;Data annotations based on model facets – Adds data validation by specifying attributes based on model facets like StringLengthAttribute (MaxLength facet), RequiredAttribute (Nullable facet), KeyAttribute(Key element), etc. &lt;/LI&gt;&lt;/OL&gt;
&lt;H4&gt;Proxies&lt;/H4&gt;
&lt;P&gt;Proxies add functionality to the basic POCO entities while maintaining the simplicity of POCO classes. They are dynamically generated entity types which derive from the basic POCO entity types and notify the object state manager about changes to entities. Thus they obviate the need to maintain snapshots of the original property values and the snapshot comparisons on SaveChanges. They also enable lazy loading which enables automatic loading of the related entity/entities when a navigation property is dereferenced. More details on POCO proxies can be found &lt;A href="http://blogs.msdn.com/adonet/archive/2009/12/22/poco-proxies-part-1.aspx" mce_href="http://blogs.msdn.com/adonet/archive/2009/12/22/poco-proxies-part-1.aspx"&gt;here&lt;/A&gt;. &lt;/P&gt;
&lt;H4&gt;Fixup&lt;/H4&gt;
&lt;P&gt;A fixup method is written for every navigation property on an entity and is called from the setter of the navigation property whenever its value changes. Its purpose is to ensure that each end of a bidirectional relationship stays in sync with the other. For example, in a one-to-many relationship between Cutomer and Order, whenever Order.Customer is set, the fixup method ensures that the Order is in the Customer’s Orders collection. It also keeps the corresponding foreign key property viz. Order.CustomerID in sync with the new Customer’s primary key (ID) value. This logic can be useful if the POCO entities are used independently of the EF stack, like for writing tests against them which don’t hit the database. Fixup ensures that the object graph is connected in the same way as you would expect while using them with EF. Fixup methods are a bit complex to write and hence it is useful to have them auto-generated if you are planning on using the entities in an EF independent scenario.&lt;/P&gt;
&lt;P&gt;We will explore five interesting combinations of these features -&lt;/P&gt;
&lt;P&gt;1. &lt;B&gt;Basic POCO without Fixup&lt;/B&gt; - In this case the POCO classes would be very simple as both fixup logic and proxies are removed. Cons of this approach are - (a) it uses snapshot mechanism to infer the UPDATE commands sent to the database server. It cannot perform notification-based change tracking which provides performance improvement in some scenarios. (b) Writing EF-independent tests can be inconvenient since fixup logic is not included and the object graph may be disconnected (or inconsistent) until DetectChanges is called.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Order
{
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; OrderID { get; set; }
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; CustomerID { get; set; }
    &lt;SPAN class=rem&gt;// Navigation Properties&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; Customer Customer { get; set; }
}&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;















.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P&gt;2. &lt;B&gt;Basic POCO with Fixup&lt;/B&gt; – Similar to (1) proxies are removed. However fixup logic is added to the entities so that the navigation properties and foreign keys are kept in sync even when EF is not present. Like (1) snapshot mechanism is used to detect property and relationship changes and performance could be improved in some scenarios by using proxies. The main disadvantage of this option as compared to (1) is that the code is more complex due to presence of fixup logic.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Order
{
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; OrderID { get; set; }

    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; CustomerID
    {
        get { &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; _customerID; }
        set
        {
            &lt;SPAN class=kwrd&gt;try&lt;/SPAN&gt;
            {
                _settingFK = &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;;
                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (_customerID != &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;)
                {
                    &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (Customer != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt; &lt;BR&gt;                        &amp;amp;&amp;amp; Customer.CustomerID != &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;)
                    {
                        Customer = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;
                    }
                    _customerID = &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;;
                }
            }
            &lt;SPAN class=kwrd&gt;finally&lt;/SPAN&gt;
            {
                _settingFK = &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;
            }
        }
    }
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; _customerID;
    
    &lt;SPAN class=rem&gt;// Navigation Properties&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; Customer Customer
    {
        get { &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; _customer; }
        set
        {
            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!ReferenceEquals(_customer, &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;))
            {
                var previousValue = _customer;
                _customer = &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;;
                FixupCustomer(previousValue);
            }
        }
    }
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; Customer _customer;

    &lt;SPAN class=rem&gt;// Association Fixup&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;bool&lt;/SPAN&gt; _settingFK = &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; FixupCustomer(Customer previousValue)
    {
        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (previousValue != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt; &lt;BR&gt;            &amp;amp;&amp;amp; previousValue.Orders.Contains(&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;))
        {
            previousValue.Orders.Remove(&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;);
        }

        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (Customer != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
        {
            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!Customer.Orders.Contains(&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;))
            {
                Customer.Orders.Add(&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;);
            }
            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (CustomerID != Customer.CustomerID)
            {
                CustomerID = Customer.CustomerID;
            }
        }
        &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!_settingFK)
        {
            CustomerID = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;
        }
    }
}&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;













.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P&gt;3. &lt;B&gt;Change Tracking Proxies without Fixup&lt;/B&gt; – This marks all the properties of the entities as “virtual” which are then internally overridden by the EF to inform the state manager about changes to the entity. The change tracking POCO entities are capable of doing their own fixup, so that code can be removed in this version. However you would have fixup if the entities are used with EF and not have it if they are used independently of EF like for testing them without hitting the database. Thus they would exhibit different behaviors depending on the scenario. Pros are of this approach are the performance improvement on SaveChanges and the simplicity of the code. There are no known issues with this combination, except for &lt;A href="http://blogs.msdn.com/adonet/archive/2010/01/05/poco-proxies-part-2-serializing-poco-proxies.aspx" mce_href="http://blogs.msdn.com/adonet/archive/2010/01/05/poco-proxies-part-2-serializing-poco-proxies.aspx"&gt;serialization&lt;/A&gt;. &lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Order
{
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;virtual&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; OrderID { get; set; }
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;virtual&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; CustomerID { get; set; }
    &lt;SPAN class=rem&gt;// Navigation Properties&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;virtual&lt;/SPAN&gt; Customer Customer { get; set; }
}&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;













.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P&gt;4. &lt;B&gt;Change Tracking Proxies with Fixup&lt;/B&gt; – This has the advantage of performance improvement on SaveChanges. Bidirectional navigation properties and foreign keys are kept in sync even when EF is not present. Cons of this combination are that (a) it increases the complexity of the POCO entities due to presence of the fixup logic. (b) We used this combination for the &lt;A href="http://blogs.msdn.com/adonet/pages/entity-framework-poco-template-updated-for-visual-studio-2010-release-candidate.aspx" mce_href="http://blogs.msdn.com/adonet/pages/entity-framework-poco-template-updated-for-visual-studio-2010-release-candidate.aspx"&gt;Visual Studio 2010 RC POCO templates release&lt;/A&gt; and noted a few issues as documented in the &lt;A href="http://blogs.msdn.com/adonet/pages/entity-framework-poco-template-updated-for-visual-studio-2010-release-candidate.aspx" mce_href="http://blogs.msdn.com/adonet/pages/entity-framework-poco-template-updated-for-visual-studio-2010-release-candidate.aspx"&gt;post&lt;/A&gt;. We are working on fixing those issues.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;partial&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Order
{
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;virtual&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; OrderID { get; set; }

    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;virtual&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; CustomerID
    {
        get { &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; _customerID; }
        set
        {
            &lt;SPAN class=kwrd&gt;try&lt;/SPAN&gt;
            {
                _settingFK = &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;;
                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (_customerID != &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;)
                {
                    &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (Customer != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt; &lt;BR&gt;                        &amp;amp;&amp;amp; Customer.CustomerID != &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;)
                    {
                        Customer = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;
                    }
                    _customerID = &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;;
                }
            }
            &lt;SPAN class=kwrd&gt;finally&lt;/SPAN&gt;
            {
                _settingFK = &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;
            }
        }
    }
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; _customerID;
    
    &lt;SPAN class=rem&gt;// Navigation Properties&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;virtual&lt;/SPAN&gt; Customer Customer
    {
        get { &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; _customer; }
        set
        {
            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!ReferenceEquals(_customer, &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;))
            {
                var previousValue = _customer;
                _customer = &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;;
                FixupCustomer(previousValue);
            }
        }
    }
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; Customer _customer;

    &lt;SPAN class=rem&gt;// Association Fixup&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;bool&lt;/SPAN&gt; _settingFK = &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; FixupCustomer(Customer previousValue)
    {
        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (previousValue != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt; &lt;BR&gt;            &amp;amp;&amp;amp; previousValue.Orders.Contains(&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;))
        {
            previousValue.Orders.Remove(&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;);
        }

        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (Customer != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
        {
            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!Customer.Orders.Contains(&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;))
            {
                Customer.Orders.Add(&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;);
            }
            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (CustomerID != Customer.CustomerID)
            {
                CustomerID = Customer.CustomerID;
            }
        }
        &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!_settingFK)
        {
            CustomerID = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;
        }
    }
}&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;













.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P&gt;5. &lt;B&gt;Lazy Loading Proxies with Fixup&lt;/B&gt; – Here you get lazy loading functionality for your entities by marking only the navigation properties as virtual. Pros are that it provides automatic loading of related entities when the navigation properties are dereferenced. Bidirectional navigation properties and foreign keys are kept in sync even when EF is not present. There are no known issues for this combination. Cons are that (a) performance could be improved in some scenarios by using notification-based mechanism for SaveChanges. (b) Also code is complex due to presence of fixup logic.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;partial&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Order
{
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; OrderID { get; set; }

    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; CustomerID
    {
        get { &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; _customerID; }
        set
        {
            &lt;SPAN class=kwrd&gt;try&lt;/SPAN&gt;
            {
                _settingFK = &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;;
                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (_customerID != &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;)
                {
                    &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (Customer != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt; &lt;BR&gt;                        &amp;amp;&amp;amp; Customer.CustomerID != &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;)
                    {
                        Customer = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;
                    }
                    _customerID = &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;;
                }
            }
            &lt;SPAN class=kwrd&gt;finally&lt;/SPAN&gt;
            {
                _settingFK = &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;
            }
        }
    }
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; _customerID;
    
    &lt;SPAN class=rem&gt;// Navigation Properties&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;virtual&lt;/SPAN&gt; Customer Customer
    {
        get { &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; _customer; }
        set
        {
            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!ReferenceEquals(_customer, &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;))
            {
                var previousValue = _customer;
                _customer = &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;;
                FixupCustomer(previousValue);
            }
        }
    }
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; Customer _customer;

    &lt;SPAN class=rem&gt;// Association Fixup&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;bool&lt;/SPAN&gt; _settingFK = &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; FixupCustomer(Customer previousValue)
    {
        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (previousValue != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt; &lt;BR&gt;            &amp;amp;&amp;amp; previousValue.Orders.Contains(&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;))
        {
            previousValue.Orders.Remove(&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;);
        }

        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (Customer != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
        {
            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!Customer.Orders.Contains(&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;))
            {
                Customer.Orders.Add(&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;);
            }
            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (CustomerID != Customer.CustomerID)
            {
                CustomerID = Customer.CustomerID;
            }
        }
        &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!_settingFK)
        {
            CustomerID = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;
        }
    }
}&lt;/PRE&gt;
&lt;H4&gt;Data Binding, WCF Serialization and Data Annotations&lt;/H4&gt;
&lt;P&gt;We could potentially add data binding support, WCF serialization support and data annotations based on model facets to the generated POCO classes. &lt;/P&gt;
&lt;H3&gt;3. Fake ObjectContext&lt;/H3&gt;
&lt;P&gt;POCO entities offer independence from the EF stack so that the logic in the entities can be tested without hitting the database. This offers advantages like the tests run faster and the database doesn’t have to be reset to its initial state after each test run. However to help write a completely EF independent test, you would also need a fake repository or a fake ObjectContext. Currently the typed ObjectContext generated from the POCO template derives from ObjectContext which is an EF class and thus is dependent on the Entity Framework. More information on using a fake ObjectContext for testability can be found in Jonathan’s post &lt;A href="http://blogs.msdn.com/adonet/pages/walkthrough-test-driven-development-with-the-entity-framework-4-0.aspx" mce_href="http://blogs.msdn.com/adonet/pages/walkthrough-test-driven-development-with-the-entity-framework-4-0.aspx"&gt;here&lt;/A&gt;. Let us see what generating fakes would mean for an application containing a typed ObjectContext named BloggingEntities,&lt;/P&gt;
&lt;P&gt;1. It would create the interface IBloggingEntities. The interface basically contains property getters for all the IObjectSets contained in this ObjectContext and the SaveChanges method. The interface for ObjectSet&amp;lt;T&amp;gt;, IObjectSet&amp;lt;T&amp;gt; is a public interface in EF.&lt;/P&gt;
&lt;P&gt;2. It would generate the classes FakeBloggingEntities and FakeObjectSet&amp;lt;T&amp;gt; which implement the interfaces IBloggingEntities and IObjectSet&amp;lt;T&amp;gt;. FakeObjectSet&amp;lt;T&amp;gt; uses an in-memory data structure like HashSet&amp;lt;T&amp;gt; to store the entities. The properties on FakeBloggingEntities return FakeObjectSets instead of real ObjectSets.&lt;/P&gt;
&lt;P&gt;3. The typed ObjectContext, BloggingEntities would derive from ObjectContext as well as IBloggingEntities and would contain the additional property members defined by IBloggingEntities.&lt;/P&gt;
&lt;P&gt;4. It could generate a repository class, BlogRepository, which serves as a thin mapper between the entities and the store. The store would be represented by a member of type IBloggingEntities. So you could substitute the store with an in-memory data structure that implements IBloggingEntities, like FakeBloggingEntities. The repository class would serve as a starting point that you could customize as needed.&lt;/P&gt;
&lt;P&gt;The tests would run against the repository, BlogRepository which would work on fake ObjectContext and fake ObjectSets and thus not hit the database. The full implementation of these classes can be found in the same &lt;A href="http://blogs.msdn.com/adonet/pages/walkthrough-test-driven-development-with-the-entity-framework-4-0.aspx" mce_href="http://blogs.msdn.com/adonet/pages/walkthrough-test-driven-development-with-the-entity-framework-4-0.aspx"&gt;post&lt;/A&gt;.&amp;nbsp; &lt;/P&gt;
&lt;H3&gt;Summary&lt;/H3&gt;
&lt;P&gt;In this post we have explored pros and cons of the various code generation options for POCO template like generate-once and template experience, full featured versus basic POCO classes and creation of fake ObjectContext for testability of your application. We would love to hear your feedback about which options are the most compelling for you and if there is anything else you believe should be added to the POCO template.&lt;/P&gt;
&lt;P&gt;Thanks, &lt;BR&gt;Sheetal Gupta &lt;BR&gt;Developer &lt;BR&gt;Entity Framework Team&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9976605" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/POCO/">POCO</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category></item><item><title>Code Only – Further Enhancements</title><link>http://blogs.msdn.com/b/efdesign/archive/2009/10/12/code-only-further-enhancements.aspx</link><pubDate>Mon, 12 Oct 2009 17:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9906285</guid><dc:creator>efdesign</dc:creator><slash:comments>43</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=9906285</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2009/10/12/code-only-further-enhancements.aspx#comments</comments><description>&lt;P&gt;We’ve come a long way since the &lt;A href="http://blogs.msdn.com/efdesign/archive/2009/08/03/code-only-enhancements.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2009/08/03/code-only-enhancements.aspx"&gt;last post on Code-Only&lt;/A&gt;. So it’s high time for another update.&lt;/P&gt;
&lt;P&gt;We’ve been working really hard on Code-Only revving the design, and spotting missing capabilities and responding to feedback both internal and external etc.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The current plan still holds.&amp;nbsp; Code-Only will not be in .Net 4.0 with the possible exception of the DDL features described in the last post.&amp;nbsp; For that portion, the implementation and requirements are more clear to us, and because making the DDL stuff work requires changes to things already in the .NET framework, and getting provider writers lined up, we are still working hard to get the DDL changes into .NET 4.0.&amp;nbsp; The rest of Code-Only will continue to evolve, and we will ship another preview or two, before getting it rolled into .NET as soon as we can after 4.0 ships. &lt;/P&gt;
&lt;H3&gt;&lt;/H3&gt;
&lt;H3&gt;&lt;/H3&gt;
&lt;H3&gt;API Refactoring&lt;/H3&gt;
&lt;P&gt;As hinted above, we’ve spent a lot of time validating code only against real world scenarios, and thinking about how the customer code hangs together etc. As a results we’ve done some API refactoring.&lt;/P&gt;
&lt;H4&gt;Mappings are now part of Configurations&lt;/H4&gt;
&lt;P&gt;In the last version Mappings were derived from Configurations, which had some strange side-effects on the API. &lt;/P&gt;
&lt;P&gt;We’ve re-arranged things now so that Configurations hold mappings, which are terminated by assignment to a table.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;builder.Entity&amp;lt;Customer&amp;gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .HasKey(c =&amp;gt; c.ID) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .MapSingleType(c =&amp;gt; new { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cid = c.ID, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nme = c.Name &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&amp;nbsp;&amp;nbsp; ) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .ToTable(“dbo.custs”);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This maps the Customer entity to the ‘dbo.Custs’ table, the ID property to the cid column, the Name property to the nme column, and registers the ID property as the EntityKey / Primary Key.&lt;/P&gt;
&lt;P&gt;As you can see we’ve also added a helper method called Entity&amp;lt;TEntity&amp;gt;() so that you can fluently create configurations and mappings. You might also have noticed that we have removed RegisterKey and replaced it with HasKey which we feel is more inline with our goal of having an intentional API.&lt;/P&gt;
&lt;H4&gt;TPH mapping syntax no longer violates DRY&lt;/H4&gt;
&lt;P&gt;The previous syntax for specifying a &lt;A href="http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx" mce_href="http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx"&gt;TPH&lt;/A&gt; mapping forced you to repeat mappings for columns that could easily have been inherited.&lt;/P&gt;
&lt;P&gt;This was unfortunate because we normally encourage TPH because generally it has the best performance characteristics.&lt;/P&gt;
&lt;P&gt;This is where MapHierarchy() and Case() come in. &lt;/P&gt;
&lt;P&gt;Imagine if we want to write these classes using TPH:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;public class Person{ &lt;BR&gt;&amp;nbsp;&amp;nbsp; public virtual int ID {get;set;} &lt;BR&gt;&amp;nbsp;&amp;nbsp; public virtual string Firstname {get;set;} &lt;BR&gt;&amp;nbsp;&amp;nbsp; public virtual string Surname {get;set;} &lt;BR&gt;} &lt;BR&gt;public class Employee: Person &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp; public virtual Employee Manager {get;set;} &lt;BR&gt;&amp;nbsp;&amp;nbsp; public virtual List&amp;lt;Employee&amp;gt; Reports {get;set;} &lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;You would now do it like this:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;builder &lt;BR&gt;&amp;nbsp;&amp;nbsp; .Entity&amp;lt;Person&amp;gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .HasKey(p =&amp;gt; p.ID) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .MapHierarchy() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .Case&amp;lt;Person&amp;gt;( &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p =&amp;gt; new { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.ID, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Firstname,&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Surname, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; thisIsADiscriminator = “P” &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&amp;nbsp;&amp;nbsp; ) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .Case&amp;lt;Employee&amp;gt;( &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e =&amp;gt; new { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; manager = e.Manager.Id &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; thisIsADiscriminator = “E” &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&amp;nbsp;&amp;nbsp; ) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .ToTable(“dbo.People”);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;By using Case&amp;lt;&amp;gt; mappings are re-used for derived type, so there is no need to repeat column mappings for ID, Firstname and Surname. &lt;/P&gt;
&lt;P&gt;Which means the Employee Case statement is only responsible for mapping properties and references declared by the Employee class, and for specifying a new discriminator value. &lt;/P&gt;
&lt;P&gt;The discriminator column and values are there so the Entity Framework can distinguish between rows in the dbo.People table that represent Person objects and those that represent Employee objects.&lt;/P&gt;
&lt;H4&gt;MapSingleType and MapHierarchy&lt;/H4&gt;
&lt;P&gt;Because Mappings are now part of the configuration, there is no need to create them independently and assign them. &lt;/P&gt;
&lt;P&gt;You now simply MapXXX() methods on the EntityConfiguration.&lt;/P&gt;
&lt;P&gt;The available mapping methods are:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;MapSingleType(λ) &lt;/LI&gt;
&lt;LI&gt;MapHierarchy(λ) &lt;/LI&gt;
&lt;LI&gt;MapHierarchy().Case&amp;lt;TEntity&amp;gt;(λ).Case&amp;lt;TDerived&amp;gt;(λ). &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;If you know the Entity Frameworks MSL files these correspond to:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Type &lt;/LI&gt;
&lt;LI&gt;OfType &lt;/LI&gt;
&lt;LI&gt;OfType with an addition requirement for a type discriminator &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;These mappings can be combined in many interesting ways, but in general this table shows the recommended way to do most common mappings:&lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width=426 height=544&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=96&gt;&lt;B&gt;Scenario&lt;/B&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=184&gt;&lt;B&gt;Code &lt;BR&gt;&lt;/B&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=268&gt;&lt;B&gt;Notes&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=96&gt;No Inheritance&lt;/TD&gt;
&lt;TD vAlign=top width=184&gt;builder.Entity&amp;lt;A&amp;gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .MapSingleType(λ) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .ToTable(“dbo.A”); &lt;BR&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=268&gt;Columns not mapped are not part of the Entity.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=96&gt;TPH&lt;/TD&gt;
&lt;TD vAlign=top width=184&gt;builder.Entity&amp;lt;A&amp;gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .MapHierarchy() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .Case&amp;lt;A&amp;gt;(λ) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .Case&amp;lt;B&amp;gt;(λ) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .Case&amp;lt;C&amp;gt;(λ) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .ToTable(“dbo.ABC”); &lt;BR&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=268&gt;Generally each Case expression only maps properties declared by the current type and the discriminator for that type. &lt;BR&gt;&lt;BR&gt;But it is possible to override the mapping for inherited properties if required. &lt;BR&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=96&gt;TPT&lt;/TD&gt;
&lt;TD vAlign=top width=184&gt;builder.Entity&amp;lt;A&amp;gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .MapHierarchy(λ) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .ToTable(“dbo.A”); &lt;BR&gt;&lt;BR&gt;builder.Entity&amp;lt;B&amp;gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .MapHierarchy(λ) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .ToTable(“dbo.B”); &lt;BR&gt;&lt;BR&gt;builder.Entity&amp;lt;C&amp;gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .MapHierarchy(λ) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .ToTable(“dbo.C”); &lt;BR&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=268&gt;Each MapHierarchy expression only maps properties declared by the current type, and properties that make up the entity key.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=96&gt;TPC&lt;/TD&gt;
&lt;TD vAlign=top width=188&gt;builder.Entity&amp;lt;A&amp;gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .MapSingleType(λ) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .ToTable(“dbo.A”); &lt;BR&gt;&lt;BR&gt;builder.Entity&amp;lt;B&amp;gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .MapSingleType(λ) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .ToTable(“dbo.B”); &lt;BR&gt;&lt;BR&gt;builder.Entity&amp;lt;C&amp;gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .MapSingleType(λ) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .ToTable(“dbo.C”); &lt;BR&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=268&gt;Each MapSingleType expression maps all properties, both those declared by the current type and those inherited.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H3&gt;Foreign Keys&lt;/H3&gt;
&lt;P&gt;In Beta2 of .NET 4.0 we added &lt;A href="http://blogs.msdn.com/efdesign/archive/2009/03/16/foreign-keys-in-the-entity-framework.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2009/03/16/foreign-keys-in-the-entity-framework.aspx"&gt;FK Association Support&lt;/A&gt;, so Code-Only needs a way to link a FK property and an Navigation Property together.&lt;/P&gt;
&lt;P&gt;Given this class:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;public class Product{ &lt;BR&gt;&amp;nbsp;&amp;nbsp; public virtual int ID {get;set;} &lt;BR&gt;&amp;nbsp;&amp;nbsp; public virtual string Name {get;set;} &lt;BR&gt;&amp;nbsp;&amp;nbsp; public virtual Category Category {get;set;} &lt;BR&gt;&amp;nbsp;&amp;nbsp; public virtual int CategoryID {get;set;} &lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;You need to be able to tell code-only that Category.ID and CategoryID should have the same value.&lt;/P&gt;
&lt;P&gt;You do it like this:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;builder.Entity&amp;lt;Product&amp;gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .Relationship(p =&amp;gt; p.Category) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .HasConstraint((p,c) =&amp;gt; p.CategoryID == c.ID);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This says that c.ID (i.e. p.Category.ID) must equal p.CategoryID, which tells code-only that p.CategoryID is an FK property and p.Category is a navigation property backed by this FK property.&lt;/P&gt;
&lt;P&gt;HasConstraint(λ) can also be used in conjunction with Relationship(λ).FromProperty(λ) like this:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;builder.Entity&amp;lt;Product&amp;gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .Relationship(p =&amp;gt; p.Category) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .FromProperty(c =&amp;gt; c.Products) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .HasConstraint((p,c) =&amp;gt; p.CategoryID == c.ID);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verd&gt;Which tells code only that Product.Category and Category.Products are inverses and that Product.CategoryID and Product.Category.ID must be the same, which implies Product.CategoryID is an FK property.&lt;/FONT&gt;&lt;/P&gt;
&lt;H3&gt;Missing Navigation Properties&lt;/H3&gt;
&lt;P&gt;Sometimes you don’t have a navigation property or FK property in the Entity which would naturally hold the FK in the database. For example imagine this scenario:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;public class Product{ &lt;BR&gt;&amp;nbsp;&amp;nbsp; public virtual int ID {get;set;} &lt;BR&gt;&amp;nbsp;&amp;nbsp; public virtual string Name {get;set;} &lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;public class Category{ &lt;BR&gt;&amp;nbsp;&amp;nbsp; public virtual int ID {get;set;} &lt;BR&gt;&amp;nbsp;&amp;nbsp; public virtual string Name {get;set;} &lt;BR&gt;&amp;nbsp;&amp;nbsp; public virtual List&amp;lt;Product&amp;gt; Products {get;set;} &lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Here there is ‘probably’ a one to many relationship between Categories and Products, and that is probably best modeled using an FK in the products table. &lt;/P&gt;
&lt;P&gt;If you start mapping the Product entity you need a way to map the FK column, but there is no reference (i.e. Product.Category) and no FK property (i.e. Product.CategoryID) to map. &lt;/P&gt;
&lt;P&gt;So we added the ability to create a fake navigation property to help out:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;builder.Entity&amp;lt;Product&amp;gt;().MapSingleType( &lt;BR&gt;&amp;nbsp;&amp;nbsp; p =&amp;gt; new { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pid = p.ID, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nme = p.Name &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cid = EntityMap.Related&amp;lt;Category&amp;gt;(c =&amp;gt; c.Products).ID &lt;BR&gt;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;).ToTable(“dbo.Products”);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Here the interesting part is EntityMap.Related, it creates a fake navigation property, just so you can use it in the mapping.&lt;/P&gt;
&lt;P&gt;The method signature looks like this:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;public static TEntity Related&amp;lt;TEntity&amp;gt;( &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Expression&amp;lt;Func&amp;lt;TEntity, object&amp;gt; &lt;BR&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Notice that this function simply returns TEntity, so in the above mapping fragment, we are mapping the ID property of the Category class to the cid column, in the ‘dbo.Products’ table.&lt;/P&gt;
&lt;H3&gt;Complex Types&lt;/H3&gt;
&lt;P&gt;Code-Only’s default behavior is to ignore properties that are not recognized as either a primitive type or an EntityType. So to support Complex Types we need a mechanism to register one, like this:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;var addressConf = builder.ComplexType&amp;lt;Address&amp;gt;();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This returns a ComplexTypeConfiguration through which you can configure the properties of the ComplexType in the same way you configure the properties of an Entity:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;addressConf.Property(a =&amp;gt; a.Street).HasMaxLength(100); &lt;BR&gt;addressConf.Property(a =&amp;gt; a.Zip).HasMaxLength(10);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Now if an entity is mapped by convention and it has a ComplexType property we will automatically introduce columns for each property of the ComplexType.&lt;/P&gt;
&lt;P&gt;If you want to explicitly map the Entity mapping the ComplexType property is pretty simple too:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;builder.Entity&amp;lt;Person&amp;gt;().MapSingleType( &lt;BR&gt;&amp;nbsp;&amp;nbsp; p =&amp;gt; new { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.ID, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fn = p.Firstname, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sn = p.Surname, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; street = p.Address.Street, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zip = p.Address.Zip &lt;BR&gt;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;H3&gt;Registering Entity Sets&lt;/H3&gt;
&lt;P&gt;Some of our early CodeOnly adopters wanted to use Code Only without having an specialized ObjectContext, and in theory with is possible:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;builder = contextBuilder.Create&amp;lt;ObjectContext&amp;gt;(); &lt;BR&gt;builder.Entity&amp;lt;Person&amp;gt;().HasKey(p =&amp;gt; p.ID);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;But what we found is you have no control over the name of the set generated. In this case we will generate an EntitySet called PersonSet, but what if I the name should be People?&lt;/P&gt;
&lt;P&gt;To address this issues we have added this method:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;builder.RegisterSet&amp;lt;Person&amp;gt;(“People”);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Not only is this useful for specifying names,&amp;nbsp; it also allows you to intentional specify what EntitySets you need. The alternative would be to encode your intent into calls to Entity&amp;lt;TEntity&amp;gt; and Relationship&amp;lt;TRelated&amp;gt;(..).&lt;/P&gt;
&lt;H3&gt;Association Mapping&lt;/H3&gt;
&lt;P&gt;We also need to add support for mapping associations that are not co-located with the Entity. For example take the relationship between Jobs and Candidates. If a candidate can apply for multiple jobs this is a classic example of a many to many relationship. &lt;/P&gt;
&lt;P&gt;If you want to take control of how this relationship is mapped you need a way to specify the mapping for the relationship, like this:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;builder &lt;BR&gt;&amp;nbsp; .Entity&amp;lt;Job&amp;gt;() &lt;BR&gt;&amp;nbsp; .Relationship(job =&amp;gt; job.Applicants) &lt;BR&gt;&amp;nbsp; .FromProperty(candidate =&amp;gt; candidate.Applications) &lt;BR&gt;&amp;nbsp; .Map(“dbo.JobApplications”, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (job,candidate) =&amp;gt; new { &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; applicantId = candidate.Id, &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; jobId = job.Id &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This does a number of things, first it indicates that Job.Candidates and Candidate.Applications are opposite ends of the same relationship.&lt;/P&gt;
&lt;P&gt;Then the Map() call indicates that the relationship should be stored in the “dbo.JobApplications” join table, with a compound PK made up of the applicantId and jobId columns. &lt;/P&gt;
&lt;P&gt;The applicantId holds the candidate.Id, and the jobId holds the job.Id, and in both cases Code Only will emit an FK constraint to ensure referential integrity.&amp;nbsp; &lt;/P&gt;
&lt;H3&gt;Interesting Column Names&lt;/H3&gt;
&lt;P&gt;The existing mapping syntax that uses anonymous types for the table and column definitions, limits you to column names that are valid CLR identifiers.&lt;/P&gt;
&lt;P&gt;So for example if you need to map to a column with a space in the name you can’t.&lt;/P&gt;
&lt;P&gt;To rectify this we added an alternate mapping syntax:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;builder.Entity&amp;lt;Product&amp;gt;().MapSingleType( &lt;BR&gt;&amp;nbsp;&amp;nbsp; p =&amp;gt; EntityMap.Row( &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EntityMap.Column(p.ID, “p i d”), &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EntityMap.Column(p.Name), &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EntityMap.Column(p.CategoryId, “c i d”) &lt;BR&gt;&amp;nbsp;&amp;nbsp; ) &lt;BR&gt;).ToTable(“dbo.Products”);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This snippet of code, maps the Product entity to the “dbo.Products” table and the ID property to a ‘p i d’ column, the Name property to a Name column and the CategoryId property to the ‘c i d’ column.&lt;/P&gt;
&lt;P&gt;This alternate API has another advantage too: it makes it easier to create mapping expressions programmatically, primarily because you no longer need to create an anonymous type when building the expression. Which is really useful if you want to configure code-only at runtime. &lt;/P&gt;
&lt;H3&gt;Extracting the EDMX&lt;/H3&gt;
&lt;P&gt;We’ve also added the ability to get the EDMX that Code Only is producing internally, either via an XmlWriter or as an XDocument:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;DbConnection connection = // some code to get a connection. &lt;BR&gt;XDocument document = builder.GetEdmx(connection);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;// or using XmlWriter &lt;BR&gt;var swriter = new StringWriter(); &lt;BR&gt;var xwriter = new XmlTextWriter(swriter); &lt;BR&gt;builder.WriteEdmx(connection, xwriter); &lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;This is pretty handy if you want to use Code Only to build your model and mappings but then pull them out so you work with the XML and our designer tooling.&lt;/P&gt;
&lt;H3&gt;Setting the StoreType&lt;/H3&gt;
&lt;P&gt;When producing the Storage Model Code Only asks the current database provider to return an appropriate store type for the CLR type and facets specified.&lt;/P&gt;
&lt;P&gt;But some CLR types and facet combinations can map to multiple possible database types. For example fixed length byte[] can map to both binary and timestamp. So in this situation SqlClient returns binary by default. &lt;/P&gt;
&lt;P&gt;But you might need a timestamp:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;builder &lt;BR&gt;&amp;nbsp;&amp;nbsp; .Entity&amp;lt;Order&amp;gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp; .Property(o =&amp;gt; o.Version)&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp; .HasStoreType(“timestamp”) &lt;BR&gt;&amp;nbsp;&amp;nbsp; .IsComputed();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This tells Code Only that the Version property of Order (which is a byte[]) is computed in the database, and is actually a ‘timestamp’ column, which is computed in the database after every insert / update.&lt;/P&gt;
&lt;H3&gt;DDL Provider Model&lt;/H3&gt;
&lt;P&gt;In our &lt;A href="http://blogs.msdn.com/efdesign/archive/2009/10/06/extending-the-entity-framework-provider-model-to-support-ddl.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2009/10/06/extending-the-entity-framework-provider-model-to-support-ddl.aspx"&gt;last post&lt;/A&gt; we covered our plans around the DDL provider model, so check that out. &lt;/P&gt;
&lt;H3&gt;Summary&lt;/H3&gt;
&lt;P&gt;As you can see Code Only is now looking much more complete.&lt;/P&gt;
&lt;P&gt;But it isn’t completely finished yet, we are still working on the rough edges, so as always we are very interested to get your feedback. &lt;/P&gt;
&lt;P&gt;In particular are there things you think we should add / rename / simplify?&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, Entity Framework Team, Microsoft. &lt;BR&gt;&lt;B&gt;&lt;I&gt;&lt;BR&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=9906285" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Providers/">Providers</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Mapping/">Mapping</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/CodeOnly/">CodeOnly</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/What_2700_s+New/">What's New</category></item><item><title>Extending the Entity Framework Provider Model to support DDL</title><link>http://blogs.msdn.com/b/efdesign/archive/2009/10/06/extending-the-entity-framework-provider-model-to-support-ddl.aspx</link><pubDate>Tue, 06 Oct 2009 21:24:18 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9903877</guid><dc:creator>efdesign</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=9903877</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2009/10/06/extending-the-entity-framework-provider-model-to-support-ddl.aspx#comments</comments><description>&lt;p&gt;As part of the first previews of &lt;a href="http://blogs.msdn.com/efdesign/archive/2009/08/03/code-only-enhancements.aspx"&gt;Code-Only&lt;/a&gt; we shared some code to create a database:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;// Create a context using code-only      &lt;br /&gt;using (var mycontext = builder.Create(dbConnection))       &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Create the database if it doesn’t already exist       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (!myContext.DatabaseExists())       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myContext.CreateDatabase();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Standard EF code goes here.       &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;But in the first preview of Code-Only this code only worked against SQL Server. &lt;/p&gt;  &lt;p&gt;The problem is that our public Provider Model (i.e. &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.common.dbproviderservices.aspx"&gt;DbProviderServices&lt;/a&gt;) has no Database Definition Language or DDL features.&lt;/p&gt;  &lt;h5&gt;Provider Model Changes&lt;/h5&gt;  &lt;p&gt;To support DDL features across different databases, we plan to extend DbProviderServices, with DDL specific services.&lt;/p&gt;  &lt;p&gt;These services will be accessed through these public methods:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public string CreateDatabaseScript(      &lt;br /&gt;&amp;#160;&amp;#160; string providerManifestToken,       &lt;br /&gt;&amp;#160;&amp;#160; StoreItemCollection storeItemCollection);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public void CreateDatabase(      &lt;br /&gt;&amp;#160;&amp;#160; DbConnection connection,       &lt;br /&gt;&amp;#160;&amp;#160; int? commandTimeout,       &lt;br /&gt;&amp;#160;&amp;#160; StoreItemCollection storeItemCollection);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public bool DatabaseExists(      &lt;br /&gt;&amp;#160;&amp;#160; DbConnection connection,       &lt;br /&gt;&amp;#160;&amp;#160; int? commandTimeout,       &lt;br /&gt;&amp;#160;&amp;#160; StoreItemCollection storeItemCollection);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public void DeleteDatabase(      &lt;br /&gt;&amp;#160;&amp;#160; DbConnection connection,       &lt;br /&gt;&amp;#160;&amp;#160; int? commandTimeout,       &lt;br /&gt;&amp;#160;&amp;#160; StoreItemCollection storeItemCollection);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Now internally those methods will call through to the following ‘protected virtual’ methods which will do the actual work: &lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;protected virtual string DbCreateDatabaseScript(      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string providerManifestToken,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; StoreItemCollection storeItemCollection);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;protected virtual void DbCreateDatabase(      &lt;br /&gt;&amp;#160;&amp;#160; DbConnection connection,       &lt;br /&gt;&amp;#160;&amp;#160; int? commandTimeout,       &lt;br /&gt;&amp;#160;&amp;#160; StoreItemCollection storeItemCollection);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;protected virtual bool DbDatabaseExists(      &lt;br /&gt;&amp;#160;&amp;#160; DbConnection connection,       &lt;br /&gt;&amp;#160;&amp;#160; int? commandTimeout,       &lt;br /&gt;&amp;#160;&amp;#160; StoreItemCollection storeItemCollection);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;protected virtual void DbDeleteDatabase(      &lt;br /&gt;&amp;#160;&amp;#160; DbConnection connection,       &lt;br /&gt;&amp;#160;&amp;#160; int? commandTimeout,       &lt;br /&gt;&amp;#160;&amp;#160; StoreItemCollection storeItemCollection);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;And the base implementations of these methods in DbProviderServices will simply throw ProviderIncompatibleExceptions. &lt;/p&gt;  &lt;p&gt;Which means the provider writers job will be to override these ‘protected virtual’ methods with an implementation that makes sense for their backend database.&lt;/p&gt;  &lt;p&gt;The key is to understand that the &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.metadata.edm.storeitemcollection.aspx"&gt;StoreItemCollection&lt;/a&gt; (aka the SSDL or StorageModel part of the EDMX) represents the intended shape of the database. &lt;/p&gt;  &lt;p&gt;This means the provider writer will need to iterate over the EntitySets (tables) and the corresponding EntityTypes (table structures) in the StoreItemCollection and create / drop / script the database and tables as required.&lt;/p&gt;  &lt;p&gt;Provider writers will be expected to override these functions so that:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;DbCreateDatabaseScript:&lt;/strong&gt; creates a native text command to create the tables and foreign key constraints defined in the StoreItemCollection. I.e. for SqlClient this would be the contents of a .sql DDL file. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;DbCreateDatabase:&lt;/strong&gt; is similar to DbCreateDatabaseScript except it should actually goes ahead and create the database, tables and foreign key constraints. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;DbDatabaseExists:&lt;/strong&gt; checks to see if the database exists. The SqlClient provider will simply check that the database itself exists, but custom provider writers could get more fancy and check to see if every table / foreign key constraint is found too. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;DbDeleteDatabase:&lt;/strong&gt; should go ahead and delete the database, or if the database server has a single database model (like Oracle) the provider writer should delete just the tables defined in the StoreItemCollection. &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Simplifying Wrapping Providers&lt;/h5&gt;  &lt;p&gt;We are also planning something to simplify writing Wrapping Providers. A wrapping provider is just a provider that wraps an existing provider (i.e. SqlClient) and adds additional services (i.e. Auditing, Logging, Caching etc). &lt;/p&gt;  &lt;p&gt;Jarek has some &lt;a href="http://blogs.msdn.com/jkowalski/archive/2009/06/11/tracing-and-caching-in-entity-framework-available-on-msdn-code-gallery.aspx"&gt;some sample wrapping providers&lt;/a&gt; if you are interested.&lt;/p&gt;  &lt;p&gt;Today writing a wrapping provider is a little tricky, in fact one ‘protected’ method is impossible to wrap without reflection. So to help we plan to add one public wrapper method:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public DbCommandDefinition CreateCommandDefinition(      &lt;br /&gt;&amp;#160;&amp;#160; DbProviderManifest providerManifest,       &lt;br /&gt;&amp;#160;&amp;#160; DbCommandTree commandTree);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;One of the reasons we plan on doing this, is we think people might take a ‘basic’ provider that has no DDL support and wrap it to add DDL support.&lt;/p&gt;  &lt;h5&gt;End User API&lt;/h5&gt;  &lt;p&gt;Now so far we’ve been looking at the planned extensions to Provider Services, but Provider Services is a very low level API that few developers will ever program against.&lt;/p&gt;  &lt;p&gt;Most people will work directly against the ObjectContext, to which we plan to add these methods:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public void CreateDatabase()&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public void DeleteDatabase();&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public bool DatabaseExists();&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public String CreateDatabaseScript();&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;This little snippet shows how easy it will be to script, create, check and delete a database:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;MyContext ctx = new MyContext();      &lt;br /&gt;String sql = ctx.CreateDatabaseScript();       &lt;br /&gt;ctx.CreateDatabase();       &lt;br /&gt;Assert.True(ctx.DatabaseExists());       &lt;br /&gt;ctx.DeleteDatabase();       &lt;br /&gt;Assert.False(ctx.DatabaseExists());&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;As you it could hardly be easier to use.&lt;/p&gt;  &lt;h5&gt;Summary:&lt;/h5&gt;  &lt;p&gt;While Code-Only provides the catalyst to add DDL support to the Entity Framework’s Provider model, this feature is about &lt;a href="http://blogs.msdn.com/alexj/archive/2009/08/12/tip-32-how-to-create-a-database-from-ssdl-ef-4-only.aspx"&gt;more than just Code-Only&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;In fact we think this feature will add significantly to the usability of the Entity Framework. &lt;/p&gt;  &lt;p&gt;But as always we are keen to hear what you think.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/alexj"&gt;&lt;b&gt;Alex James&lt;/b&gt;&lt;/a&gt;     &lt;br /&gt;Program Manager, Entity Framework Team, Microsoft.     &lt;br /&gt;&lt;b&gt;&lt;i&gt;       &lt;br /&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"&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=9903877" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Providers/">Providers</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/CodeOnly/">CodeOnly</category></item><item><title>LINQ to SQL to Entity Framework conversion template</title><link>http://blogs.msdn.com/b/efdesign/archive/2009/08/13/linq-to-sql-to-entity-framework-conversion-template.aspx</link><pubDate>Fri, 14 Aug 2009 00:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9868818</guid><dc:creator>efdesign</dc:creator><slash:comments>11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=9868818</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2009/08/13/linq-to-sql-to-entity-framework-conversion-template.aspx#comments</comments><description>&lt;P&gt;Many customers have asked us how to port a LINQ to SQL application to the Entity Framework. In order to make this process easier, we have developed a metadata conversion template. &lt;/P&gt;
&lt;P&gt;This template converts LINQ to SQL metadata (.dbml) to metadata compatible with Entity Framework (.edmx). While not a complete solution to the conversion problem, it is a useful first step. The template available for download is still in the development stage, and any feedback you have on the user experience, additional features, or any other aspect of the conversion would be greatly appreciated. &lt;/P&gt;
&lt;P&gt;The T4 template is intended to convert simple valid .dbml files to .edmx files. All of the basic elements of the .dbml file are mapped to their .edmx counterparts. For instance, Tables are mapped to EntitySets and Types are mapped to EntityTypes. Additionally, stored procedures (including customized insert, update and delete stored procedures) and associations are also converted. &lt;/P&gt;
&lt;H4&gt;Downloading the Metadata Conversion Template&lt;/H4&gt;
&lt;P&gt;Included in the zip file is a .vsix installer for the T4 Conversion Template. Also included is detailed documentation for the template. VS 2010 Beta 1 is required.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/efdesign/attachment/9868818.ashx" mce_href="http://blogs.msdn.com/efdesign/attachment/9868818.ashx"&gt;Download the Template&lt;/A&gt;&lt;/P&gt;
&lt;H4&gt;&lt;/H4&gt;
&lt;H4&gt;Walkthroughs&lt;/H4&gt;
&lt;P&gt;Two walkthroughs have been written to help guide users through the conversion process. The walkthroughs both take the form of unit tests which can be run against the existing LINQ to SQL metadata and the Entity Framework metadata produced by the conversion template. Each walkthrough contains detailed instructions on how to convert the existing LINQ to SQL project to Entity Framework using the Conversion Template. The first is the Widget Factory walkthrough, which shows a basic conversion. The second (CustomCUD) shows how to convert a LINQ to SQL project which uses custom insert, update and delete stored procedures. The walkthroughs are available individually. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/efdesign/pages/widget-factory-walkthrough-for-the-linq-to-sql-to-entity-framework-metadata-conversion-template.aspx" mce_href="http://blogs.msdn.com/efdesign/pages/widget-factory-walkthrough-for-the-linq-to-sql-to-entity-framework-metadata-conversion-template.aspx"&gt;Widget Factory Walkthrough&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/efdesign/pages/custom-cud-walkthrough-for-linq-to-sql-to-entity-framework-metadata-conversion-template.aspx" mce_href="http://blogs.msdn.com/efdesign/pages/custom-cud-walkthrough-for-linq-to-sql-to-entity-framework-metadata-conversion-template.aspx"&gt;Custom CUD Walkthrough&lt;/A&gt;&lt;/P&gt;
&lt;H4&gt;&lt;/H4&gt;
&lt;H4&gt;Caveats and Known Issues&lt;/H4&gt;
&lt;P&gt;Because the Conversion Template is still under development, there are a number of open issues and unimplemented features. A more comprehensive list can be found in the documentation included with the template installer. &lt;/P&gt;
&lt;P&gt;· Inheritance: Inheritance has not been fully implemented. While the template may work in some basic cases, this aspect of the conversion remains an open issue.&lt;/P&gt;
&lt;P&gt;· Independent Associations: Foreign-key associations will not be available until .NET 4.0 Beta 2, so the current version of the template will only work with the "UseIndependentAssociations" flag set to true.&lt;/P&gt;
&lt;P&gt;· Property Attributes: not all of the property attributes (such as "Unicode" and "FixedLength") are converted because these are not explicitly present in the .dbml file.&lt;/P&gt;
&lt;H4&gt;Feedback&lt;/H4&gt;
&lt;P&gt;We are interested to hear any comments you have about known issues, additional feature requests, suggestions for additional walkthroughs or any other aspect of the conversion process.&lt;/P&gt;
&lt;P&gt;Thanks, &lt;BR&gt;&lt;STRONG&gt;Christina Ilvento &lt;BR&gt;&lt;/STRONG&gt;Developer, &lt;BR&gt;Entity Framework Team&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9868818" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-09-86-88-18/FullInstaller.zip" length="45365" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Linq+to+Sql/">Linq to Sql</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Templates/">Templates</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Migration/">Migration</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category></item><item><title>Code Only Enhancements</title><link>http://blogs.msdn.com/b/efdesign/archive/2009/08/03/code-only-enhancements.aspx</link><pubDate>Tue, 04 Aug 2009 01:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9856565</guid><dc:creator>efdesign</dc:creator><slash:comments>30</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=9856565</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2009/08/03/code-only-enhancements.aspx#comments</comments><description>&lt;p&gt;We've been working hard on Code Only since the &lt;a href="http://blogs.msdn.com/adonet/archive/2009/06/22/feature-ctp-walkthrough-code-only-for-entity-framework.aspx" mce_href="http://blogs.msdn.com/adonet/archive/2009/06/22/feature-ctp-walkthrough-code-only-for-entity-framework.aspx"&gt;first preview&lt;/a&gt;.&lt;/p&gt;In the next release you will be able to specify: 
&lt;ol&gt;
&lt;li&gt;Navigation Property Inverses. &lt;/li&gt;
&lt;li&gt;Property Facets, like &lt;font face="Courier New"&gt;Nullability&lt;/font&gt;, &lt;font face="Courier New"&gt;MaxLength&lt;/font&gt;, &lt;font face="Courier New"&gt;Precision&lt;/font&gt; etc. &lt;/li&gt;
&lt;li&gt;Property to Column mappings &lt;/li&gt;
&lt;li&gt;Type to Table(s) mappings &lt;/li&gt;
&lt;li&gt;Inheritance strategy &lt;/li&gt;
&lt;li&gt;Encapsulate configuration &lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;The rest of this post will drill into each of these features in turn.&lt;/p&gt;
&lt;h3&gt;Registering NavigationProperty inverses:&lt;/h3&gt;
&lt;p&gt;You can now Register Inverses, i.e. link one navigation property to another, like this:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;builder.RegisterInverse( &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (Customer c) =&amp;gt; c.Orders, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (Order o) =&amp;gt; o.Customer) &lt;br&gt;);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;This code indicates that &lt;font face="Courier New"&gt;Customer.Orders&lt;/font&gt; is the other end of the &lt;font face="Courier New"&gt;Order.Customer&lt;/font&gt; relationship. Adding &lt;font face="Courier New"&gt;order1&lt;/font&gt; to the &lt;font face="Courier New"&gt;customer1.Orders&lt;/font&gt; collection, has the same effect as setting the &lt;font face="Courier New"&gt;order1.Customer&lt;/font&gt; to &lt;font face="Courier New"&gt;customer1&lt;/font&gt;.&lt;/p&gt;
&lt;h3&gt;Specifying Property Facets:&lt;/h3&gt;
&lt;p&gt;You can also specify property facets, i.e. things like Nullability, MaxLength, Precision etc, like this:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;var customerConfig = new EntityConfiguration&amp;lt;Customer&amp;gt;(); &lt;br&gt;// We can infer that the ID is the Primary Key, &lt;br&gt;// but not that it is generated in the database on insert. &lt;br&gt;customerConfig.ForProperty(c =&amp;gt; c.ID) &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; .Identity(); &lt;br&gt;customerConfig.ForProperty(c =&amp;gt; c.Name) &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; .MaxLength(100) &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; .NonUnicode(); &lt;br&gt;customerConfig.ForProperty(c =&amp;gt; c.Website) &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; .MaxLength(200) &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; .Nullable()&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;builder.Configure(customerConfig);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;This configures the &lt;font face="Courier New"&gt;Customer&lt;/font&gt; type so that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;font face="Courier New"&gt;ID&lt;/font&gt; property is an &lt;font face="Courier New"&gt;Identity&lt;/font&gt; column, i.e. the value is computed by the database when we do an insert. &lt;/li&gt;
&lt;li&gt;The &lt;font face="Courier New"&gt;Name&lt;/font&gt; property has a &lt;font face="Courier New"&gt;MaxLength&lt;/font&gt; of &lt;font face="Courier New"&gt;100&lt;/font&gt; characters and is &lt;font face="Courier New"&gt;NonUnicode&lt;/font&gt; i.e. in SqlServer &lt;font face="Courier New"&gt;VARCHAR&lt;/font&gt; rather than &lt;font face="Courier New"&gt;NVARCHAR&lt;/font&gt;. &lt;/li&gt;
&lt;li&gt;The &lt;font face="Courier New"&gt;Website&lt;/font&gt; property has a &lt;font face="Courier New"&gt;MaxLength&lt;/font&gt; of &lt;font face="Courier New"&gt;200&lt;/font&gt; characters and is &lt;font face="Courier New"&gt;Nullable&lt;/font&gt;. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;These facets target the Conceptual Model (i.e. CSDL), and from there flow to the database too (i.e. SSDL).&lt;/p&gt;
&lt;h4&gt;Encapsulating Facet Configuration&lt;/h4&gt;
&lt;p&gt;You can create a class to encapsulate all this configuration by deriving from &lt;font face="Courier New"&gt;EntityConfiguration&amp;lt;T&amp;gt;&lt;/font&gt;.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;public class CustomerConfig: EntityConfiguration&amp;lt;Customer&amp;gt; &lt;br&gt;{ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public CustomerConfig(){ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ForProperty(c =&amp;gt; c.ID) &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; .Identity(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ForProperty(c =&amp;gt; c.Name) &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; .MaxLength(100) &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; .NonUnicode(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ForProperty(c =&amp;gt; c.Website) &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; .MaxLenght(200) &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; .Nullable(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;We recommend creating classes like this instead of configuring an &lt;font face="Courier New"&gt;EntityConfiguration&amp;lt;&amp;gt;&lt;/font&gt; because of the encapsulation benefits.&lt;/p&gt;
&lt;h4&gt;Specifying the Tablename&lt;/h4&gt;
&lt;p&gt;When you use &lt;font face="Courier New"&gt;Configure&amp;lt;T&amp;gt;(..)&lt;/font&gt; the EF infers a default mapping, inheritance strategy (&lt;a href="http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx" mce_href="http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx"&gt;TPH&lt;/a&gt;) and table name(s) for you.&lt;/p&gt;
&lt;p&gt;But if you want to specify the table name you can do this:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;var customerConfig = new EntityConfiguration&amp;lt;Customer&amp;gt;(); &lt;br&gt;// configure the facets, as per the above example &lt;br&gt;...&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;// register configuration with a particular tablename &lt;br&gt;builder.Tables[“dbo.Custs”] = customerConfig;&lt;/font&gt;&lt;/p&gt;
&lt;h3&gt;Specifying Mappings:&lt;/h3&gt;
&lt;p&gt;If you need more control over the mappings (for example to map to an existing database or use corporate naming policies) then you can specify mappings like this:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;EntityMap&amp;lt;Customer&amp;gt; customerMap =&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map.OfType&amp;lt;Customer&amp;gt;( &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c =&amp;gt; new { &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; cid = c.ID, &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; c.Name, &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; csite = c.Website &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/font&gt; &lt;/p&gt;
&lt;h4&gt;Interpreting a Mapping&lt;/h4&gt;
&lt;p&gt;This mapping states that the &lt;font face="Courier New"&gt;ID&lt;/font&gt; property is mapped to the ‘&lt;font face="Courier New"&gt;cid&lt;/font&gt;’ column, the &lt;font face="Courier New"&gt;Name&lt;/font&gt; property is stored in the ‘&lt;font face="Courier New"&gt;Name&lt;/font&gt;’ column and the Website property is mapped to the ‘&lt;font face="Courier New"&gt;csite&lt;/font&gt;’ column.&lt;/p&gt;
&lt;p&gt;Properties not referenced are not persisted (just like properties in a partial class when using the default code generation of EF)&lt;/p&gt;
&lt;h4&gt;LINQ Comprehension Syntax&lt;/h4&gt;
&lt;p&gt;You can even specify exactly the same thing using a LINQ comprehension syntax too:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;EntityMap&amp;lt;Customer&amp;gt; customerMap = &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from c in Map.OfType&amp;lt;Customer&amp;gt;()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select new { &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; cid = c.ID, &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; c.Name, &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; csite = c.Website &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/font&gt;&lt;/p&gt;
&lt;h4&gt;Specifying Facets with Mapping&lt;/h4&gt;
&lt;p&gt;Once you’ve configured the mapping you can also specify facets on the map like this: &lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;customerMap.ForProperty(c =&amp;gt; c.ID) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Identity(); &lt;br&gt;customerMap.ForProperty(c =&amp;gt; c.Name) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .MaxLength(100) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .NonUnicode(); &lt;br&gt;customerMap.ForProperty(c =&amp;gt; c.Website) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .MaxLenght(200) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Nullable();&lt;/font&gt;&lt;/p&gt;
&lt;h4&gt;Specifying the table&lt;/h4&gt;
&lt;p&gt;The final step is to assign the map to a table.&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;builder.Tables[“dbo.Custs”] = customerMap;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Now we’ve specified a custom table, mapping and custom facets for our &lt;font face="Courier New"&gt;Customer&lt;/font&gt; class.&lt;/p&gt;
&lt;h3&gt;Specifying Inheritance:&lt;/h3&gt;
&lt;p&gt;The default inheritance strategy used by CodeOnly is Table Per Hierarchy (or &lt;a href="http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx" mce_href="http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx"&gt;TPH&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;If however you need a different strategy you need to dive in and configure the mappings.&lt;/p&gt;
&lt;p&gt;Imagine if you have three classes you need to map: &lt;font face="Courier New"&gt;Vehicle&lt;/font&gt; , &lt;font face="Courier New"&gt;Car&lt;/font&gt; and &lt;font face="Courier New"&gt;Boat&lt;/font&gt; where both &lt;font face="Courier New"&gt;Car&lt;/font&gt; and &lt;font face="Courier New"&gt;Boat&lt;/font&gt; are derived from&lt;font face="Courier New"&gt; &lt;/font&gt;&lt;font face="Courier New"&gt;Vehicle&lt;/font&gt; which is &lt;font face="Courier New"&gt;abstract.&lt;/font&gt;&lt;/p&gt;
&lt;h6&gt;&lt;a href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CodeOnlyEnhancements_D54B/clip_image001_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CodeOnlyEnhancements_D54B/clip_image001_2.jpg"&gt;&lt;img src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CodeOnlyEnhancements_D54B/clip_image001_thumb.jpg" style="border-width: 0px; display: inline;" title="clip_image001" alt="clip_image001" mce_src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CodeOnlyEnhancements_D54B/clip_image001_thumb.jpg" width="445" border="0" height="423"&gt;&lt;/a&gt;&lt;/h6&gt;
&lt;h4&gt;Table Per Hierarchy (TPH)&lt;/h4&gt;
&lt;p&gt;If you want to map this using &lt;a href="http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx" mce_href="http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx"&gt;TPH&lt;/a&gt;, you could do it like this:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;var vehicleMap =&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map.OfTypeOnly&amp;lt;Vehicle&amp;gt;( &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v =&amp;gt; new { &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; vid = v.ID, &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; v.Name, &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; vdesc = v.Description &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; v.MaxPassengers, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ).Union(Map.OfTypeOnly&amp;lt;Car&amp;gt;( &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c =&amp;gt; new {&amp;nbsp;&lt;br&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vid = c.ID,&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c.Name, &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; vdesc = c.Description&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c.MaxPassengers,&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; trans = c.Transmission, &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; tspd = c.Topspeed, &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; ccty = c.EngineCapacity, &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; ncyld = c.NoCylinder, &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; discriminator = “CAR” &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ).Union(Map.OfTypeOnly&amp;lt;Boat&amp;gt;( &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b =&amp;gt; new {&amp;nbsp;&lt;br&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vid = b.ID,&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b.Name, &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; vdesc = b.Description&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b.MaxPassengers,&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; lng = b.Length, &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; b.HasSail, &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; b.HasEngine &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; discriminator = “BOAT” &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;builder.Tables[“dbo.vehicles”] = vehicleMap;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;In a TPH mapping:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;OfTypeOnly() is used to create mapping fragments.&lt;/li&gt;
&lt;li&gt;Mapping fragments are&amp;nbsp;then unioned so they can be assigned to one table (TPH uses a single table for the whole hierarchy). &lt;/li&gt;
&lt;li&gt;A discriminator column is required for each non-abstract type. The discriminator column can have any name and must have a different constant value (i.e. “CAR”) for each non abstract type in the hierarchy. &lt;/li&gt;
&lt;li&gt;When mapping a derived type you&amp;nbsp;must&amp;nbsp;re-map all properties mapped in the base-type(s). &lt;/li&gt;&lt;/ol&gt;
&lt;h4&gt;Table Per Type (TPT)&lt;/h4&gt;
&lt;p&gt;If you want to map the same hierarchy using Table Per Type or &lt;a href="http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx" mce_href="http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx"&gt;TPT&lt;/a&gt;, this is how you do it:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;builder.Table[“dbo.Vehicles”]=&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map.OfType&amp;lt;Vehicle&amp;gt;( &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v =&amp;gt; new { &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; vid = v.ID, &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; v.Name, &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; vdesc = v.Description &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; v.MaxPassengers, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;builder.Tables[“dbo.Cars”] =&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map.OfType&amp;lt;Car&amp;gt;( &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c =&amp;gt; new { &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; cid = c.ID, &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; trans = c.Transmission, &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; tspd = c.Topspeed, &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; ccty = c.EngineCapacity, &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; ncyld = c.NoCylinders, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;builder.Tables[“dbo.Boats”] =&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map.OfType&amp;lt;Boat&amp;gt;( &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b =&amp;gt; new { &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; bid = b.ID, &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; lng = b.Length, &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; b.HasSail, &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; b.HasEngine &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;In a TPT mapping:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;OfType&amp;lt;&amp;gt;() is used in each mapping 'fragment'&lt;/li&gt;
&lt;li&gt;Each mapping 'fragment' is assigned to a different table.&lt;/li&gt;
&lt;li&gt;Each mapping 'fragment' only maps properties declared on the current type, except… &lt;/li&gt;
&lt;li&gt;Key properties must be mapped in every fragment (this allows the tables participating in the type to be joined). &lt;/li&gt;
&lt;li&gt;There are no discriminators &lt;/li&gt;&lt;/ol&gt;
&lt;h4&gt;Table Per Class (TPC)&lt;/h4&gt;
&lt;p&gt;You can also map this hierarchy using &lt;a href="http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx" mce_href="http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx"&gt;TPC&lt;/a&gt; like this:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;builder.Tables[“dbo.Cars”] =&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map.OfTypeOnly&amp;lt;Car&amp;gt;( &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c =&amp;gt; new { &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; cid = c.ID, &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; c.Name, &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; vdesc = c.Description &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; c.MaxPassengers, &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; trans = c.Transmission, &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; tspd = c.Topspeed, &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; ccty = c.EngineCapacity, &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; ncyld = c.NoCylinders, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;builder.Tables[“dbo.Boats”] =&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map.OfTypeOnly&amp;lt;Boat&amp;gt;( &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b =&amp;gt; new { &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; bid = b.ID, &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; b.Name, &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; description = b.Description &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; b.MaxPassengers, &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; lng = b.Length, &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; b.HasSail, &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; b.HasEngine &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;In a TPC Mapping:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Like TPH we use &lt;font face="Courier New"&gt;OfTypeOnly(..)&lt;/font&gt; &lt;/li&gt;
&lt;li&gt;But unlike TPH each non-abstract type has a its own table. (So there is no table for Vehicles because it is abstract). &lt;/li&gt;
&lt;li&gt;Each mapping fragment re-maps every, non-transient, property. &lt;/li&gt;
&lt;li&gt;There is no mapping for any abstract classes in the hierarchy. &lt;/li&gt;
&lt;li&gt;There are no discriminators&lt;/li&gt;&lt;/ol&gt;
&lt;h3&gt;Default Foreign Key Locations:&lt;/h3&gt;
&lt;p&gt;If we see a reference (i.e. &lt;font face="Courier New"&gt;Order.Customer&lt;/font&gt;) we assume the multiplicity is &lt;font face="Courier New"&gt;0..1&lt;/font&gt;. Meaning the the Foreign Key or FK is nullable.&lt;/p&gt;
&lt;p&gt;If we see a collection (i.e. &lt;font face="Courier New"&gt;Customer.Orders&lt;/font&gt;) we assume the multiplicity is &lt;font face="Courier New"&gt;many&lt;/font&gt;. &lt;/p&gt;
&lt;p&gt;Then when you Register Inverses, we know the multiplicity of both ends of the relationships i.e. in the above example we know that there are &lt;font face="Courier New"&gt;0..1 Customers&lt;/font&gt; for an &lt;font face="Courier New"&gt;Order&lt;/font&gt; and &lt;font face="Courier New"&gt;many Orders&lt;/font&gt; for a &lt;font face="Courier New"&gt;Customer&lt;/font&gt;.&lt;/p&gt;
&lt;p&gt;So by convention there are 3 main types of relationships, we need to infer the FK location for:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;0..1 to many&lt;/b&gt; –&amp;gt; by convention we put the FK on the many end. So in the &lt;font face="Courier New"&gt;Customer.Orders&lt;/font&gt; example the FK is put in the &lt;font face="Courier New"&gt;Orders&lt;/font&gt; table.&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;b&gt;many to many&lt;/b&gt; –&amp;gt; there is no option but to introduce a join table &lt;br&gt;&lt;b&gt;&lt;br&gt;0..1 to 0..1&lt;/b&gt; –&amp;gt; You can configure where the FK lives, but in the absence of configuration we will introduce a join table.&lt;/p&gt;
&lt;p&gt;Sometimes however a reference is not &lt;font face="Courier New"&gt;0..1&lt;/font&gt; it is &lt;font face="Courier New"&gt;1&lt;/font&gt;, i.e. the FK, wherever it might be, may not be &lt;font face="Courier New"&gt;nullable.&lt;/font&gt; &lt;/p&gt;
&lt;p&gt;This is how you specify that the FK is non-nullable:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;var orderConfig = builder.Configure&amp;lt;Order&amp;gt;(); &lt;br&gt;orderConfig.RegisterInverse(o =&amp;gt; o.Customer, c =&amp;gt; c.Orders); &lt;br&gt;orderConfig.ForProperty(o =&amp;gt; o.Customer).NonNullable();&lt;/font&gt; &lt;br&gt;&lt;br&gt;This tells us that there is exactly &lt;font face="Courier New"&gt;1&lt;/font&gt; &lt;font face="Courier New"&gt;Customer&lt;/font&gt; per &lt;font face="Courier New"&gt;Order&lt;/font&gt; and &lt;font face="Courier New"&gt;many Orders&lt;/font&gt; for a &lt;font face="Courier New"&gt;Customer&lt;/font&gt;. &lt;/p&gt;
&lt;p&gt;The ability to tell us that a reference is &lt;font face="Courier New"&gt;NonNullable&lt;/font&gt; introduces several new multiplicity combinations, for which we need conventions too:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1 to many&lt;/b&gt; –&amp;gt; by convention we put the FK on the many end, and make it non-nullable in the database.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;0..1 to 1&lt;/b&gt; –&amp;gt; by convention we put the FK on the 1 end, and make it non-nullable.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1 to 1&lt;/b&gt; –&amp;gt; like 0..1 to 0..1 we can’t decide where to put the FK so by convention we introduce a join table.&lt;/p&gt;
&lt;h3&gt;Specifying FK Mappings:&lt;/h3&gt;
&lt;p&gt;So far we’ve created mappings for the properties of entities.&lt;/p&gt;
&lt;p&gt;What about Navigation Properties and FKs? &lt;/p&gt;
&lt;p&gt;All types of relationships (except many to many) can be modeled without a join table in the database. So we allow you to map FKs as part of an &lt;font face="Courier New"&gt;EntityMap&lt;/font&gt; like this:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;EntityMap&amp;lt;Customer&amp;gt; customerMap = &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from c in Map.OfType&amp;lt;Customer&amp;gt;()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select new { &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; cid = c.ID, &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; c.Name, &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; csite = c.Website, &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; salesPersonFK = c.SalesPerson.ID &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;customerMap.RegisterInverse(c =&amp;gt; c.SalesPerson, s =&amp;gt; c.Clients); &lt;br&gt;builder.Tables[“dbo.Custs”] = customerMap;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;This specifies that the &lt;font face="Courier New"&gt;Customer.SalesPerson&lt;/font&gt; navigation property, and it’s inverse &lt;font face="Courier New"&gt;SalesPerson.Customers&lt;/font&gt;, are stored in the &lt;font face="Courier New"&gt;salesPersonFK&lt;/font&gt; column in the&lt;font face="Courier New"&gt; dbo.Custs&lt;/font&gt; table. Because the fragment maps the &lt;font face="Courier New"&gt;salesPersonFK&lt;/font&gt; column to the &lt;font face="Courier New"&gt;c.SalesPerson.ID&lt;/font&gt;, where &lt;font face="Courier New"&gt;SalesPerson.ID&lt;/font&gt; is the Primary Key (or part of the PrimaryKey) of the related &lt;font face="Courier New"&gt;SalesPerson&lt;/font&gt; entity, and of course FK’s point to PK’s.&lt;/p&gt;
&lt;h3&gt;Specifying Join Table Mappings:&lt;/h3&gt;
&lt;p&gt;In the case of many to many relationships you must have a join table, so absent mapping information we produce a join table by convention. &lt;/p&gt;
&lt;p&gt;If however you need more control you can do this:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;var blogPostsMap = new AssociationMap&amp;lt;Blog, Post&amp;gt;( &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b =&amp;gt; b.Posts &lt;br&gt;).Map( &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (b, p) =&amp;gt; new {BlogId = b.ID, PostId = p.ID} &lt;br&gt;);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;builder.Tables[“dbo.BlogPosts”] = blogPostsMap;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;This says the many to many relationships between &lt;font face="Courier New"&gt;Blog&lt;/font&gt; and &lt;font face="Courier New"&gt;Post&lt;/font&gt; is stored in the ‘&lt;font face="Courier New"&gt;dbo.BlogPosts&lt;/font&gt;’ table which has two columns: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;‘&lt;font face="Courier New"&gt;BlogId&lt;/font&gt;’ which is also an FK pointing to the column to which the &lt;font face="Courier New"&gt;ID&lt;/font&gt; property of &lt;font face="Courier New"&gt;Blog&lt;/font&gt; is mapped. &lt;/li&gt;
&lt;li&gt;‘&lt;font face="Courier New"&gt;PostId&lt;/font&gt;’ which is also an FK pointing to the column to which the &lt;font face="Courier New"&gt;ID&lt;/font&gt; property of &lt;font face="Courier New"&gt;Post&lt;/font&gt; is mapped. &lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;Entity Splitting:&lt;/h3&gt;
&lt;p&gt;Code Only can even support more advanced mapping strategies like entity splitting:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;builder.Tables[“dbo.Customer”] = Map.OfType&amp;lt;Customer&amp;gt;( &lt;br&gt;&amp;nbsp;&amp;nbsp; c =&amp;gt; new { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cid = c.ID, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c.Name, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; active = c.IsActive &lt;br&gt;&amp;nbsp;&amp;nbsp; } &lt;br&gt;);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;builder.Tables[“dbo.CustomerDetails”] = Map.OfType&amp;lt;Customer&amp;gt;( &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c =&amp;gt; new { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cid = c.ID, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c.Size, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c.Industry &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;This says that the &lt;font face="Courier New"&gt;Customer&lt;/font&gt; entity is split across the &lt;font face="Courier New"&gt;dbo.Customer&lt;/font&gt; and &lt;font face="Courier New"&gt;dbo.CustomerDetails&lt;/font&gt; tables.&lt;/p&gt;
&lt;h3&gt;Encapsulating all the Configuration:&lt;/h3&gt;
&lt;p&gt;You can also write a class that derives from &lt;font face="Courier New"&gt;EntityMap&amp;lt;T&amp;gt;&lt;/font&gt;, to hold all the mapping, facets etc. For example here a class that holds the configuration for &lt;font face="Courier New"&gt;Product&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;public class ProductMap: EntityMap&amp;lt;Product&amp;gt; &lt;br&gt;{ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ProductMap{ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Map( p =&amp;gt; new { &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; pid = p.ID, &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; pcode = p.Name, &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; cid = p.Category.ID &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ForProperty(p =&amp;gt; p.ID).Identity(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ForProperty(p =&amp;gt; p.Name).MaxLength(100) &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; .NonUnicode(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ForProperty(p =&amp;gt; p.Category).NonNullable(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.RegisterInverse(p =&amp;gt; p.Category, &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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c =&amp;gt; c.Products);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;This approach is highly recommended, because configuring the &lt;font face="Courier New"&gt;Product&lt;/font&gt; type is now trivial:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;builder.Tables[“dbo.Products”] = new ProductMap();&lt;/font&gt;&lt;/p&gt;
&lt;h3&gt;Summary:&lt;/h3&gt;
&lt;p&gt;As you can see we are planning a lot of enhancements which will allow most core scenarios. &lt;/p&gt;
&lt;p&gt;What do you think? Do you like the API? Are there things you’d like to see look a little different?&lt;/p&gt;
&lt;p&gt;As always we are very keen to hear 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, Entity Framework Team, Microsoft. &lt;br&gt;&lt;br&gt;&lt;i&gt;&lt;b&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;/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;&lt;i&gt;&lt;b&gt;this post&lt;/b&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;b&gt;. &lt;/b&gt;&lt;/i&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9856565" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/CodeOnly/">CodeOnly</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category></item><item><title>Code Only</title><link>http://blogs.msdn.com/b/efdesign/archive/2009/06/10/code-only.aspx</link><pubDate>Wed, 10 Jun 2009 23:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9724905</guid><dc:creator>efdesign</dc:creator><slash:comments>32</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=9724905</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2009/06/10/code-only.aspx#comments</comments><description>&lt;P&gt;There are currently two ways to get Entity Framework apps up and running, we call these Database First and Model First respectively. &lt;/P&gt;
&lt;P&gt;Database First has been with us since .NET 3.5 SP1, and involves reverse engineering an Entity Data Model from an existing database.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/adonet/archive/2009/05/12/sneak-preview-model-first-in-the-entity-framework-4-0.aspx" mce_href="http://blogs.msdn.com/adonet/archive/2009/05/12/sneak-preview-model-first-in-the-entity-framework-4-0.aspx"&gt;Model First&lt;/A&gt; is new to Visual Studio 2010/.NET 4.0 and allows you to create an Entity Data Model from scratch and then generate a database and mapping for it.&lt;/P&gt;
&lt;P&gt;However many developers view their Code as their model. &lt;/P&gt;
&lt;P&gt;Ideally these developers just want to write some Domain classes and without ever touching a designer or a piece of XML be able to use those classes with the Entity Framework. &lt;BR&gt;Basically they want to write ‘Code Only’.&lt;/P&gt;
&lt;P&gt;We are pleased to announce that we’ll be shipping a preview of “Code Only” on top of the .NET Framework 4.0 Beta 1 (more on that in the coming days).&lt;/P&gt;
&lt;H5&gt;How it works:&lt;/H5&gt;
&lt;P&gt;To use Code only you simply write some &lt;A href="http://blogs.msdn.com/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx" mce_href="http://blogs.msdn.com/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx"&gt;POCO classes&lt;/A&gt;, here is a simple example:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;public class Category &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp; public int ID { get; set; } &lt;BR&gt;&amp;nbsp;&amp;nbsp; public string Name { get; set; } &lt;BR&gt;&amp;nbsp;&amp;nbsp; public List&amp;lt;Product&amp;gt; Products { get; set; } &lt;BR&gt;} &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;public class Product &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp; public int ID { get; set; } &lt;BR&gt;&amp;nbsp;&amp;nbsp; public string Name { get; set; } &lt;BR&gt;&amp;nbsp;&amp;nbsp; public Category Category { get; set; } &lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Then write a class that derives from &lt;FONT face="Courier New"&gt;ObjectContext&lt;/FONT&gt; that describes the shape of your model and how you want to access your POCO classes, so something like this: &lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;public class MyContext : ObjectContext &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp; public MyContext(EntityConnection conn) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; : base(conn){ }&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp; public ObjectSet&amp;lt;Category&amp;gt; Categories { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return base.CreateObjectSet&amp;lt;Category&amp;gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&amp;nbsp;&amp;nbsp; public ObjectSet&amp;lt;Product&amp;gt; Products { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return base.CreateObjectSet&amp;lt;Product&amp;gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;NOTE:&lt;/STRONG&gt; this persistence / EF aware class could easily be in another assembly so you can keep it separate from your nice pristine domain classes.&lt;/P&gt;
&lt;P&gt;At this point you have everything you need from a CLR perspective, but you won’t be able to use the &lt;FONT face="Courier New"&gt;MyContext&lt;/FONT&gt; class without some EF metadata, which is normally stored in the EDMX file. &lt;/P&gt;
&lt;P&gt;But remember Code-Only means there isn’t an EDMX file. &lt;BR&gt;So where do we get the metadata? &lt;BR&gt;That is where the &lt;FONT face="Courier New"&gt;ContextBuilder&lt;/FONT&gt; class comes in:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;SqlConnection connection = …; // some un-opened SqlConnection &lt;BR&gt;MyContext context = ContextBuilder.Create&amp;lt;MyContext&amp;gt;(connection);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;What is happening here is that the &lt;FONT face="Courier New"&gt;ContextBuilder&lt;/FONT&gt; is looking at the Properties on &lt;FONT face="Courier New"&gt;MyContext&lt;/FONT&gt;, inferring a default Conceptual Model, Storage Model and Mapping by convention, it the uses that metadata plus the &lt;FONT face="Courier New"&gt;SqlConnection&lt;/FONT&gt; you passed in to create an &lt;FONT face="Courier New"&gt;EntityConnection&lt;/FONT&gt;, and finally it constructs an instance of &lt;FONT face="Courier New"&gt;MyContext&lt;/FONT&gt; by passing the &lt;FONT face="Courier New"&gt;EntityConnection&lt;/FONT&gt; to the constructor we created previously.&lt;/P&gt;
&lt;P&gt;Once you have an instance of your context, we ship several extension methods you can use to automatically create a database script, see if the database exists, drops the database, and/or create the database,. For example this code snippet uses two of those extension methods to create the database if it doesn’t already exist.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;if (!context.DatabaseExists()) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; context.CreateDatabase();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;The &lt;FONT face="Courier New"&gt;CreateDatabase&lt;/FONT&gt; call looks at the EF metadata, in particular the Storage Model, aka SSDL, and uses it to produce Database Definition Language (or DDL) which it then executes against against the connection. &lt;/P&gt;
&lt;H5&gt;Overriding Conventions&lt;/H5&gt;
&lt;P&gt;In the examples so far everything is done by convention. This is great if you are happy with our conventions. However you may want to override them, for example to register different keys, use different mappings or use a different inheritance strategy etc.&lt;/P&gt;
&lt;P&gt;To override the convention instead of creating an &lt;FONT face="Courier New"&gt;ObjectContext&lt;/FONT&gt; directly you create an instance of a &lt;FONT face="Courier New"&gt;ContextBuilder&lt;/FONT&gt; that you can configure. &lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;var contextBuilder = new ContextBuilder&amp;lt;MyContext&amp;gt;();&lt;/FONT&gt; &lt;BR&gt;&lt;BR&gt;In the first Feature CTP, Code Only provides the ability to override how the key properties are inferred:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;contextBuilder.RegisterKey((Product p) =&amp;gt; p.ID);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This code tells the builder that the key of &lt;FONT face="Courier New"&gt;Product&lt;/FONT&gt; is its &lt;FONT face="Courier New"&gt;ID&lt;/FONT&gt; property.&lt;/P&gt;
&lt;P&gt;When you’ve finished configuring how you want your model and mappings to work in your code, you create an instance of your context, this time by calling Create on the builder instance you have been configuring:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;MyContext context = contextBuilder.Create(connection);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;It is that simple.&lt;/P&gt;
&lt;P&gt;Over time the features of the &lt;FONT face="Courier New"&gt;ContextBuilder&lt;/FONT&gt; will grow so you will be able to setup custom mappings, mark properties as transient, setup up Facets (e.g. &lt;FONT face="Courier New"&gt;MaxLength&lt;/FONT&gt;), change inheritance strategies, link properties that are the inverse of each other together (e.g. &lt;FONT face="Courier New"&gt;product.Category&lt;/FONT&gt; and &lt;FONT face="Courier New"&gt;category.Products&lt;/FONT&gt;) and more. In fact here is an example of the sort of thing we are aiming to support for the next release of the Feature CTP: &lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;builder[“dbo.prds”] =&amp;nbsp; &lt;BR&gt;&amp;nbsp; from c in builder.OfType&amp;lt;Product&amp;gt;() &lt;BR&gt;&amp;nbsp; select new { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pcode = p.ID, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.Name, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cat = p.Category.ID &lt;BR&gt;&amp;nbsp; } &lt;BR&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This snippet:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Maps &lt;FONT face="Courier New"&gt;Product&lt;/FONT&gt; entities to the ‘&lt;FONT face="Courier New"&gt;prds&lt;/FONT&gt;’ table. &lt;/LI&gt;
&lt;LI&gt;Maps &lt;FONT face="Courier New"&gt;Product.ID&lt;/FONT&gt; to a ‘&lt;FONT face="Courier New"&gt;pcode&lt;/FONT&gt;’ column. &lt;/LI&gt;
&lt;LI&gt;Maps &lt;FONT face="Courier New"&gt;Product.Name&lt;/FONT&gt; to a ‘&lt;FONT face="Courier New"&gt;Name&lt;/FONT&gt;’ column. &lt;/LI&gt;
&lt;LI&gt;Maps the FK under the &lt;FONT face="Courier New"&gt;Product.Category&lt;/FONT&gt; relationship to the ‘&lt;FONT face="Courier New"&gt;cat&lt;/FONT&gt;’ column. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Here is another example that does basic &lt;A href="http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx" mce_href="http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx"&gt;TPH&lt;/A&gt; inheritance:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;builder[“dbo.Cars”] = ( &lt;BR&gt;&amp;nbsp; from b in builder.OfTypeOnly&amp;lt;Car&amp;gt;() &lt;BR&gt;&amp;nbsp; select new { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id = b.CID.AsKey(), &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b.Color, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b.Manufacturer, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; disc = “C” &lt;BR&gt;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;).Merge( &lt;BR&gt;&amp;nbsp; from s in builder.OfType&amp;lt;SportsCar&amp;gt;() &lt;BR&gt;&amp;nbsp; select new { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id = s.CID.AsKey(),&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.Color,&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.Manufacturer,&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; disc = “S”,&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hp = s.HorsePower,&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tq = s.Torque &lt;BR&gt;&amp;nbsp; } &lt;BR&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;These two examples just scratch the surface of what we are planning on doing, hopefully though they give you a sense of where we are heading. &lt;/P&gt;
&lt;P&gt;We are super excited about Code Only. But as of right now our plans to support overriding conventions aren’t finalized, so we’d love to get your feedback, this really is your chance to help us get it right.&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, Entity Framework Team, Microsoft &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;B&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;/B&gt;&lt;/EM&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;EM&gt;&lt;B&gt;this post&lt;/B&gt;&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;&lt;B&gt;. &lt;/B&gt;&lt;/EM&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9724905" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Mapping/">Mapping</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/ObjectServices/">ObjectServices</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/CodeOnly/">CodeOnly</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+Futures/">Entity Framework Futures</category></item><item><title>Self-Tracking Entities in the Entity Framework</title><link>http://blogs.msdn.com/b/efdesign/archive/2009/03/24/self-tracking-entities-in-the-entity-framework.aspx</link><pubDate>Tue, 24 Mar 2009 04:50:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9503127</guid><dc:creator>efdesign</dc:creator><slash:comments>72</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=9503127</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2009/03/24/self-tracking-entities-in-the-entity-framework.aspx#comments</comments><description>&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: 14pt; line-height: 115%; mso-bidi-font-size: 11.0pt"&gt;Background &lt;/span&gt;&lt;/b&gt;    &lt;p mce_keep="true"&gt;&lt;/p&gt; &lt;/p&gt; One of the biggest pieces of feedback we received from the &lt;a href="http://blogs.msdn.com/efdesign/archive/2008/11/20/n-tier-improvements-for-entity-framework.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2008/11/20/n-tier-improvements-for-entity-framework.aspx"&gt;N-Tier Improvements for Entity Framework&lt;/a&gt; post as well as other sources was: &amp;#8220;low level APIs are great, but where is the end-to-end architecture for N-tier and the Entity Framework?&amp;#8221;. &lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;This post outlines some of the additional feedback we&amp;#8217;ve received and describes the self-tracking entities architecture that will ship along side of VisualStudio 2010 and .NET Framework 4.0.  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;When an application goes multi-tier, there are important &lt;a href="http://www.codeplex.com/AppArchGuide" mce_href="http://www.codeplex.com/AppArchGuide"&gt;architectural decisions&lt;/a&gt; that the application developer makes around how to communicate between tiers. There are a lot of choices, and the choice depends on a variety of conditions. How rapidly is each tier expected to change? How much control is there over each tier? Are their specific protocol, security, or business policy concerns? The answers to these questions often drive the selection of whether to use data transfer objects (DTOs) or DataSets or something different altogether.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: 14pt; line-height: 115%; mso-bidi-font-size: 11.0pt"&gt;Self-Tracking Entities &lt;/span&gt;&lt;/b&gt;    &lt;p mce_keep="true"&gt;&lt;/p&gt; &lt;/p&gt; Self-tracking entities know how to do their own change tracking regardless of which tier those changes are made on. As an architecture, self-tracking entities falls between DTOs and DataSets and includes some of the benefits of each.   &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: 12pt; line-height: 115%; mso-bidi-font-size: 11.0pt"&gt;Drawing from DataSet &lt;/span&gt;&lt;/b&gt;    &lt;p mce_keep="true"&gt;&lt;/p&gt; &lt;/p&gt; DataSet on the client tier is very easy to use because there is no need to track changes separately or maintain any extra data structures that include change tracking information. DataSet takes care of serializing state information for each row of data. On the mid tier, applying the changes stored within a DataSet is straightforward. DataSets have also gained popularity because of the number of tools that work with DataSets, and because they are easily bound to many UI/presentation controls. Since it works in so many scenarios, for many applications there is never a need to transform data outside of a DataSet allowing a single paradigm to be used up and down the stack.  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;However, there are disadvantages to DataSets when used as the communication payload between tiers. The first is the cost of getting the data into a serializable format, and the second is that the DataSet serialization format is generally not very interoperable with other languages that are used to expose services. Another disadvantage of using a DataSet is that you can quickly lose the intent of your service call because so many kinds of things can be included in a DataSet. For example, if the service method is declared as:&lt;/p&gt;  &lt;p class="MsoNormal" style="background: #dbe5f1; mso-background-themecolor: accent1; mso-background-themetint: 51"&gt;&lt;span style="font-size: 10pt; background: #dbe5f1; line-height: 115%; font-family: " mso-shading-themecolor:="mso-shading-themecolor:" accent1;="accent1;" mso-shading-themetint:="mso-shading-themetint:" 51?="51?" courier="courier" new?;="new?;"&gt;DataSet GetCustomer(string id); &lt;/span&gt;&lt;/p&gt;  &lt;p mce_keep="true"&gt;&lt;/p&gt; It is extra work to ensure that the DataSet that is returned contains only rows of data that pertain to &amp;#8220;customers&amp;#8221;. It is also more difficult to specify a service contract that says the DataSet is also supposed to return data for each customer&amp;#8217;s orders and their order details.  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Self-tracking entities share many advantages with DataSet. They also encapsulate change tracking information, which is serialized along with the data contained in the entity. On the mid-tier applying changes from a graph of self-tracking entities to a persistent context is equally &lt;a href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=10661&amp;amp;postid=9503077#Midtier" mce_href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=10661&amp;amp;postid=9503077#Midtier"&gt;straightforward&lt;/a&gt;. The Entity Framework will also provide tools for &lt;a href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=10661&amp;amp;postid=9503077#Generating" mce_href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=10661&amp;amp;postid=9503077#Generating"&gt;generating self-tracking entities&lt;/a&gt; and because these entities are just objects, they can be easily made to work with UI/presentation controls.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: 12pt; line-height: 115%; mso-bidi-font-size: 11.0pt"&gt;Drawing from DTOs &lt;/span&gt;&lt;/b&gt;    &lt;p mce_keep="true"&gt;&lt;/p&gt; &lt;/p&gt; DTOs and SOA are used to give the developer more control over the service contract and payload for tier to tier communication. DTOs themselves do not have behavior, so they are typically very simple classes designed just to provide the needed information to perform a specific service operation. Not only does this provide the opportunity to optimize the wire format (some believe a DTO is all about the wire format), but it makes it possible and easy to capture the intent of each service method. The data contract used with DTOs is typically interoperable which makes it easy to use services that run on different platforms. DTOs also provide a way to separate messaging contracts from the presentation layer, the business logic, and the persistence layer which in many cases creates a maintainable architecture.   &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;There are disadvantages to using DTOs and the primary one is complexity. DTOs are often hand-crafted to include only the specific information that is needed for an operation. When there is a common pattern for mapping DTOs to entity classes, there are some tools available that will do DTO generation and mapping but it is not always possible. With DTOs, it is up to the developer to decide how to do change tracking on each tier (especially the client) which increases the complexity of the presentation layer. The complexity of the service implementation also increases because the developer is responsible for translating the DTO into entities for doing business logic validation, as well as being able to report changes stored in the DTO to the persistence framework. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;Not only do self-tracking entities share advantages with DataSets as mentioned above, they also share many advantages with DTOs. Self-tracking entities expose a simple and interoperable wire format and it is clear what kinds of data a service method requires or returns. You can also use a self-tracking entity as part of a message. However, self-tracking entities don&amp;#8217;t give quite as much architectural separation as using pure DTOs, but you do gain a less complex solution that requires fewer data transformations. It is important to note that self-tracking entities can be made to be ignorant of any particular persistence framework making them essentially POCO objects. Particular persistence frameworks such as the Entity Framework will have the capabilities to create these entities and interpret the change tracking information when saving changes.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: 12pt; line-height: 115%; mso-bidi-font-size: 11.0pt"&gt;.NET Framework 3.5SP1 Challenge &lt;/span&gt;&lt;/b&gt;    &lt;p mce_keep="true"&gt;&lt;/p&gt; &lt;/p&gt; With the .NET Framework 3.5SP1, this sort of solution was very hard to implement using the Entity Framework because change tracking was always done by a centralized ObjectContext which contains an ObjectStateManager. In particular, &amp;#8220;reattaching&amp;#8221; to report changes back to the ObjectStateManager was all but impossible without completely shredding your entity graph and applying changes one entity and one relationship at a time. The &lt;a href="http://blogs.msdn.com/efdesign/archive/2008/11/20/n-tier-improvements-for-entity-framework.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2008/11/20/n-tier-improvements-for-entity-framework.aspx"&gt;new API changes&lt;/a&gt; that are being added to the Entity Framework in .NET Framework 4.0 are enablers for an easier experience of reporting changes back to the ObjectStateManager, making self-tracking entities (as well as other architectures) easier to build.  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a name="Midtier"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: 14pt; line-height: 115%; mso-bidi-font-size: 11.0pt"&gt;Mid-tier experience &lt;/span&gt;&lt;/b&gt;      &lt;p mce_keep="true"&gt;&lt;/p&gt;   &lt;/a&gt;&lt;/p&gt; &lt;span style="mso-bookmark: midtier"&gt;Using self-tracking entities on the mid-tier is about working with entity graphs and the Entity Framework. The service contract that is used in the following examples contains two simple methods for retrieving a Customer entity graph and applying updates to that entity graph:&lt;/span&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="background: #dbe5f1; margin-bottom: 0pt; line-height: normal; mso-background-themecolor: accent1; mso-background-themetint: 51; mso-layout-grid-align: none"&gt;&lt;span style="mso-bookmark: midtier"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;interface &lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: midtier"&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;ICustomerService        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: midtier"&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;{        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: midtier"&gt;&lt;span style="font-size: 10pt; color: #2b91af; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Customer&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: midtier"&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt; GetCustomer(&lt;span style="color: blue"&gt;string&lt;/span&gt; customerID);         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: midtier"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;bool &lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: midtier"&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;UpdateCustomer(&lt;span style="color: #2b91af"&gt;Customer&lt;/span&gt; customer);         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-bookmark: midtier"&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;} &lt;/span&gt;&lt;/span&gt;    &lt;p mce_keep="true"&gt;&lt;/p&gt; &lt;/p&gt; &lt;span style="mso-bookmark: midtier"&gt;The implementation of the GetCustomer service method can be done using an Entity Framework ObjectContext and using LINQ or query builder methods to retrieve the entity you want. In the example below, a query is issued for a particular customer entity and all of the Orders and OrderDetails are included.&lt;/span&gt;  &lt;p&gt;&lt;/p&gt; &lt;span style="mso-bookmark: midtier"&gt;&lt;/span&gt;  &lt;p class="MsoNormal" style="background: #dbe5f1; margin-bottom: 0pt; line-height: normal; mso-background-themecolor: accent1; mso-background-themetint: 51; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;public&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt; &lt;span style="color: #2b91af"&gt;Customer&lt;/span&gt; GetCustomer(&lt;span style="color: blue"&gt;string&lt;/span&gt; customerID)       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " 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; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;NorthwindEFContext&lt;/span&gt; context = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;NorthwindEFContext&lt;/span&gt;())       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; result = context.Customers.       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Include(&lt;span style="color: #a31515"&gt;&amp;quot;Orders.OrderDetails&amp;quot;&lt;/span&gt;).       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Single(c =&amp;gt; c.CustomerID == customerID);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; result;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;} &lt;/span&gt;&lt;/p&gt;  &lt;p mce_keep="true"&gt;&lt;/p&gt; &lt;span style="mso-no-proof: yes"&gt;UpdateCustomer is example of how to save the changes that are made to a graph of self-tracking entities. Similar to DataSet, applying these changes to the persistence layer and saving them should be simple. In the below example, a new Entity Framework API, &amp;#8220;ApplyChanges&amp;#8221; is used which understands how to interpret the change tracking information that is stored by each entity and how to tell the ObjectContext&amp;#8217;s ObjectStateManager about those changes. &lt;/span&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="background: #dbe5f1; margin-bottom: 0pt; line-height: normal; mso-background-themecolor: accent1; mso-background-themetint: 51; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;public&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt; &lt;span style="color: blue"&gt;void &lt;/span&gt;UpdateCustomer(&lt;span style="color: #2b91af"&gt;Customer&lt;/span&gt; customer)       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " 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; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;NorthwindEFContext&lt;/span&gt; context = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;NorthwindEFContext&lt;/span&gt;())       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;context.Customers.ApplyChanges(customer);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;context.SaveChanges();       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;}&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: 14pt; line-height: 115%; mso-bidi-font-size: 11.0pt"&gt;Client Experience &lt;/span&gt;&lt;/b&gt;    &lt;p mce_keep="true"&gt;&lt;/p&gt; &lt;/p&gt; The client experience when working with self-tracking entities is similar to how you would manipulate any object graph. You can make changes to scalar or complex properties, add or remove references, and add or remove from collections of related entities. The key part of the experience is that tracking changes is hidden from the client because it is done internally on each entity. There is no ObjectContext and there is no extra state that has to be maintained or passed from client to the tier that does persistence.   &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;In this example, the test first queries for a customer, then deletes one of the orders. The resulting entity graph is sent back to the service tier using &lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;the UpdateCustomer method.&lt;/p&gt;  &lt;p class="MsoNormal" style="background: #dbe5f1; margin-bottom: 0pt; line-height: normal; mso-background-themecolor: accent1; mso-background-themetint: 51; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;public&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; DeleteObjectsTest()       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " 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; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;CustomerServiceClient&lt;/span&gt; client = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CustomerServiceClient&lt;/span&gt;())       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; customer = client.GetCustomer(&lt;span style="color: #a31515"&gt;&amp;quot;ALFKI&amp;quot;&lt;/span&gt;);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;customer.Orders.First().Delete();       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;client.UpdateCustomer(customer);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;} &lt;/span&gt;&lt;/p&gt;  &lt;p mce_keep="true"&gt;&lt;/p&gt; &lt;span style="mso-no-proof: yes"&gt;The next test shows how to add a new Order with two OrderDetails to an existing customer. By default, the constructor of a self-tracking entity puts the entity in the &amp;#8220;Added&amp;#8221; state. There are conveience methods on each self-tracking entity to change this state if needed (Delete() and SetUnchanged()). &lt;/span&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="background: #dbe5f1; margin-bottom: 0pt; line-height: normal; mso-background-themecolor: accent1; mso-background-themetint: 51; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;public&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; AddObjectsTest()       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " 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; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;CustomerServiceClient&lt;/span&gt; client = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CustomerServiceClient&lt;/span&gt;())       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; customer = client.GetCustomer(&lt;span style="color: #a31515"&gt;&amp;quot;ALFKI&amp;quot;&lt;/span&gt;);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;customer.Orders.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Order&lt;/span&gt;() {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OrderID = 100,       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;OrderDetails = {       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;OrderDetail&lt;/span&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ProductID = 3,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Quantity = 7       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; },       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;OrderDetail&lt;/span&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ProductID = 4,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Quantity = 8       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; },       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;client.UpdateCustomer(customer);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;} &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;The final example shows that a self-tracking entity graph&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;can contain any number of changes and those changes can be any combination of adds, modifications, and deletes. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="background: #dbe5f1; margin-bottom: 0pt; line-height: normal; mso-background-themecolor: accent1; mso-background-themetint: 51; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;public&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ComplexModificationsTest ()       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " 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; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;CustomerServiceClient&lt;/span&gt; client = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CustomerServiceClient&lt;/span&gt;())       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; cust = client.GetCustomer(&lt;span style="color: #a31515"&gt;&amp;quot;ALFKI&amp;quot;&lt;/span&gt;);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;// remove first order - will do cascade in the database        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;cust.Orders.Remove(cust.Orders.First());       &lt;br /&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;// modify one of the orders          &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; order = cust.Orders.Last();         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;order.RequiredDate = &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.Now;         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;order.OrderDetails.Add(         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;OrderDetail&lt;/span&gt;{         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ProductID = 7,&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Quantity = 3&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// add new order          &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;cust.Orders.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Order&lt;/span&gt;()           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;OrderID = 100,           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;OrderDate = &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.Now,           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;ShipCity = &lt;span style="color: #a31515"&gt;&amp;quot;Redmond&amp;quot;&lt;/span&gt;,           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;ShipAddress = &lt;span style="color: #a31515"&gt;&amp;quot;One Microsoft Way&amp;quot;&lt;/span&gt;,           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;ShipRegion = &lt;span style="color: #a31515"&gt;&amp;quot;WA&amp;quot;&lt;/span&gt;,           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;ShipPostalCode = &lt;span style="color: #a31515"&gt;&amp;quot;98052&amp;quot;&lt;/span&gt;,           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;OrderDetails = {           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;OrderDetail&lt;/span&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ProductID = 3,           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Quantity = 7           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; },           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;OrderDetail&lt;/span&gt;{&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ProductID = 4,           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Quantity = 8           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; },           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;});           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;client.UpdateCustomer(cust);           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}           &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;} &lt;/span&gt;        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;/span&gt;&lt;/span&gt;    &lt;p&gt;&lt;/p&gt; &lt;/p&gt; &lt;a name="Generating"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: 14pt; line-height: 115%; mso-bidi-font-size: 11.0pt; mso-no-proof: yes"&gt;Generating Self-Tracking Entities &lt;/span&gt;      &lt;p mce_keep="true"&gt;&lt;/p&gt;   &lt;/b&gt;&lt;/a&gt;&lt;span style="mso-no-proof: yes"&gt;Building self-tracking entities should be as easy as using them. We plan to ship a &lt;/span&gt;&lt;a href="http://blogs.msdn.com/efdesign/archive/2009/01/22/customizing-entity-classes-with-t4.aspx" mce_href="http://blogs.msdn.com/efdesign/archive/2009/01/22/customizing-entity-classes-with-t4.aspx"&gt;&lt;span style="mso-no-proof: yes"&gt;T4 template&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-no-proof: yes"&gt; that will do the code generation for creating self-tracking entities from your EDM. This template will show up in the list of available templates when you right click on your model and choose &lt;i style="mso-bidi-font-style: normal"&gt;Add New Artifact Generation Item&lt;/i&gt;. &lt;/span&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/SelfTrackingEntitiesintheEntityFramework_10506/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/SelfTrackingEntitiesintheEntityFramework_10506/clip_image002_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="149" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/SelfTrackingEntitiesintheEntityFramework_10506/clip_image002_thumb.jpg" width="244" border="0" v:shapes="Picture_x0020_1" mce_src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/SelfTrackingEntitiesintheEntityFramework_10506/clip_image002_thumb.jpg" /&gt;&lt;/a&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: 14pt; line-height: 115%; mso-bidi-font-size: 11.0pt; mso-no-proof: yes"&gt;Design Notes &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: 12pt; line-height: 115%; mso-bidi-font-size: 11.0pt; mso-no-proof: yes"&gt;Inside a Self-Tracking Entity &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;There have not been final decisions about what exactly will be included inside of a self-tracking entity, but it is important to track:&lt;/span&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes"&gt;The state of the entity, Added, Deleted, Modified, or Unchanged&lt;/span&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes"&gt;The original value from reference relationship properties&lt;/span&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes"&gt;Adds and removes from collection relationship properties &lt;/span&gt;&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;This information will be included with the data contract of the entity. As part of the code generation of each self-tracking entity, scalar and complex property changes will mark the entity as &amp;#8220;dirty&amp;#8221; meaning that its state will change from Unchanged to Modified. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: 12pt; line-height: 115%; mso-bidi-font-size: 11.0pt; mso-no-proof: yes"&gt;Inside ApplyChanges &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;ApplyChanges is a new API on the ObjectContext and ObjectSet classes that attaches an entity graph and interprets the change tracking information stored in each entity. The design &lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;for discovering the change tracking information has not yet been finalized, but there are a couple of options available. One would be to code generate an interface as part of the T4 template for self-tracking entities as well as a version of ApplyChanges that knew about the interface. Another option would be fall back to runtime discovery of the particular properties using a convension and some of the new dynamic capabilities of the framework. The thing we want to avoid is causing the self-tracking entity implementation to have a dependency on any of the Entity Framework assemblies. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;The algorithm that ApplyChanges uses is:&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes; mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: ignore"&gt;1.&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal" times="times" roman??="roman??" new="new"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes"&gt;Attaching the entity graph to the ObjectContext&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes; mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: ignore"&gt;2.&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal" times="times" roman??="roman??" new="new"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes"&gt;Changing the state of each entity using the ChangeObjectState API.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes; mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: ignore"&gt;3.&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal" times="times" roman??="roman??" new="new"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes"&gt;For any reference relationship property, if there is an original value changing the state of the original reference relationship to Deleted and change the state of the current reference relationship to Added. This is done using the ChangeRelationshipState API.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes; mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: ignore"&gt;4.&lt;span style="font-weight: normal; font-size: 7pt; line-height: normal; font-style: normal; font-variant: normal" times="times" roman??="roman??" new="new"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes"&gt;For any collection relationship property, use the ChangeRelationshipState API to mark any removed relationships as Deleted and to mark any added relationships as Added. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size: 14pt; line-height: 115%; mso-bidi-font-size: 11.0pt; mso-no-proof: yes"&gt;Summary &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;We&amp;#8217;ve received a lot of feedback and suggestions on how to make developing multi-tier applications easier using the Entity Framework. One of the components of improving this experience is the introduction of an end-to-end architecture around self-tracking entities. We&amp;#8217;d like to hear your feedback on this addition to the Entity Framework, and any other comments you have on the matter of multi-tier development using domain models and entities. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="mso-no-proof: yes"&gt;Jeff Derstadt&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-no-proof: yes"&gt;,      &lt;br /&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes"&gt;Dev Lead, Entity Framework Team, Microsoft &lt;/span&gt;&lt;/p&gt;  &lt;p mce_keep="true"&gt;&lt;/p&gt; &lt;em&gt;&lt;b&gt;&lt;span style="font-size: 11pt; font-family: " mso-ascii-theme-font:="mso-ascii-theme-font:" minor-latin;="minor-latin;" mso-hansi-theme-font:="mso-hansi-theme-font:" minor-latin?="minor-latin?" calibri?,?sans-serif?;="calibri?,?sans-serif?;"&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;/span&gt;&lt;/b&gt;&lt;/em&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;em&gt;&lt;b&gt;&lt;span style="font-size: 11pt; color: blue; font-family: " mso-ascii-theme-font:="mso-ascii-theme-font:" minor-latin;="minor-latin;" mso-hansi-theme-font:="mso-hansi-theme-font:" calibri?,?sans-serif?;="calibri?,?sans-serif?;" TEXT-DECORATION:="TEXT-DECORATION:" none;="none;" text-underline:="text-underline:" none?="none?"&gt;this post&lt;/span&gt;&lt;/b&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;b&gt;&lt;span style="font-size: 11pt; font-family: " mso-ascii-theme-font:="mso-ascii-theme-font:" minor-latin;="minor-latin;" mso-hansi-theme-font:="mso-hansi-theme-font:" minor-latin?="minor-latin?" calibri?,?sans-serif?;="calibri?,?sans-serif?;"&gt;. &lt;/span&gt;&lt;/b&gt;&lt;/em&gt;&lt;span style="font-size: 11pt; font-family: " mso-ascii-theme-font:="mso-ascii-theme-font:" minor-latin;="minor-latin;" mso-hansi-theme-font:="mso-hansi-theme-font:" minor-latin?="minor-latin?" calibri?,?sans-serif?;="calibri?,?sans-serif?;"&gt;&lt;/span&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9503127" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/POCO/">POCO</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Self_2D00_Tracking+Entities/">Self-Tracking Entities</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/T4/">T4</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Templates/">Templates</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+4/">Entity Framework 4</category></item><item><title>Foreign Keys in the Entity Framework</title><link>http://blogs.msdn.com/b/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>41</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=9481955</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2009/03/16/foreign-keys-in-the-entity-framework.aspx#comments</comments><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/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/EDM/">EDM</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/N_2D00_Tier/">N-Tier</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Designer/">Designer</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/FKs/">FKs</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+4/">Entity Framework 4</category></item><item><title>Customizing Entity Classes in VS 2010</title><link>http://blogs.msdn.com/b/efdesign/archive/2009/01/22/customizing-entity-classes-with-t4.aspx</link><pubDate>Thu, 22 Jan 2009 22:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9370115</guid><dc:creator>efdesign</dc:creator><slash:comments>28</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=9370115</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2009/01/22/customizing-entity-classes-with-t4.aspx#comments</comments><description>&lt;P&gt;When VS 2010 ships it will include some significant improvements to our code generation story for the Entity Framework. The basic idea is to make use of T4 templates for code generation and ship strong integration into the Entity Framework Designer to make the experience of customizing those templates as seamless as possible. &lt;BR&gt;&lt;BR&gt;Below Sanjay from our Tools team outlines what will be possible once VS 2010 is released.&lt;/P&gt;
&lt;H3&gt;Customize the code generated by the Entity Designer with T4 templates&lt;/H3&gt;
&lt;P&gt;In Visual Studio 2008 SP1, the ADO.NET Entity Designer generates classes from the CSDL portion of the EDMX file using the &lt;A href="http://msdn.microsoft.com/en-us/library/system.data.entity.design.entityclassgenerator.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.data.entity.design.entityclassgenerator.aspx"&gt;EntityClassGenerator&lt;/A&gt; APIs. Numerous customers have asked us how to customize the code generation for a variety of scenarios including:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Make the generated ObjectContext internal &lt;/LI&gt;
&lt;LI&gt;Make the generated ObjectContext and Entity classes implement a user-defined interface &lt;/LI&gt;
&lt;LI&gt;Add user-defined CLR attributes to generated ObjectContext and generated Entity classes &lt;/LI&gt;
&lt;LI&gt;Influence generated classes based on structural annotations in CSDL &lt;/LI&gt;
&lt;LI&gt;Generate the ObjectContext and Entity classes into separate files &lt;/LI&gt;
&lt;LI&gt;Generate “proxy classes” for the generated classes &lt;/LI&gt;
&lt;LI&gt;Partially or fully change how classes are generated, maybe even generate additional (non code) artifacts in the project &lt;/LI&gt;
&lt;LI&gt;Completely replace entity framework code generation with custom code &lt;/LI&gt;
&lt;LI&gt;Generate POCO classes from the model to use as a starting point in my applications &lt;/LI&gt;
&lt;LI&gt;Generate self-tracking entity classes &lt;/LI&gt;
&lt;LI&gt;· ... &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;While the SingleFileGenerator techniques described &lt;A href="http://blogs.msdn.com/adonet/archive/2008/01/24/customizing-code-generation-in-the-ado-net-entity-designer.aspx" mce_href="http://blogs.msdn.com/adonet/archive/2008/01/24/customizing-code-generation-in-the-ado-net-entity-designer.aspx"&gt;here&lt;/A&gt; enable some of these scenarios these techniques are generally difficult to implement and install or are tricky to debug and customize.&lt;/P&gt;
&lt;P&gt;In Visual Studio 2010, we plan to give customers the ability to use &lt;A href="http://msdn.microsoft.com/en-us/library/bb126445.aspx" mce_href="http://msdn.microsoft.com/en-us/library/bb126445.aspx"&gt;T4 templates&lt;/A&gt; to generate their classes, and are also planning deep integration with the Entity Designer and Visual Studio to provide a great end-to-end experience.&lt;/P&gt;
&lt;H3&gt;Walkthrough&lt;/H3&gt;
&lt;P&gt;The example below customizes code generation to make the generated classes implement a user-defined interface (e.g. &lt;EM&gt;IValidate&lt;/EM&gt;).&lt;/P&gt;
&lt;H4&gt;Preconditions:&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;User has installed Visual Studio 2010 &lt;/LI&gt;
&lt;LI&gt;User is familiar with customizing T4 templates &lt;/LI&gt;
&lt;LI&gt;User has a C# or a VB console project that targets FX4.0 with an EDMX file in the project &lt;/LI&gt;&lt;/UL&gt;
&lt;H4&gt;Walkthrough:&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;User: opens EDMX file in the Entity Designer. Note that the generated classes are in a child file of the EDMX file (i.e. in Northwind.Designer.cs) &lt;BR&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_4.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=369 alt=image src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_thumb_1.png" width=241 border=0 mce_src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_thumb_1.png"&gt;&lt;/A&gt; &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;User: right-clicks on an empty area of the designer surface and chooses “&lt;EM&gt;Add New Artifact Generation Item…&lt;/EM&gt;” from the context menu. &lt;BR&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_6.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=328 alt=image src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_thumb_2.png" width=250 border=0 mce_src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_thumb_2.png"&gt;&lt;/A&gt; &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Visual Studio: displays the standard “&lt;EM&gt;Add New Item&lt;/EM&gt;” dialog and shows a filtered list of items for the user to select from. As expected, the “&lt;EM&gt;Add New Item&lt;/EM&gt;” dialog only shows a list of item templates specific to the current project target framework version, project type and language. &lt;BR&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_8.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=377 alt=image src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_thumb_3.png" width=632 border=0 mce_src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_thumb_3.png"&gt;&lt;/A&gt; &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;User: selects “&lt;EM&gt;ADO.NET EntityObject Generator&lt;/EM&gt;”, specifies a file name and clicks “&lt;EM&gt;Add"&lt;/EM&gt; &lt;/LI&gt;
&lt;LI&gt;Visual Studio: checks out the project from Source Control if necessary &lt;/LI&gt;
&lt;LI&gt;Visual Studio: sets the “&lt;EM&gt;Custom Tool&lt;/EM&gt;” property of the EDMX file to empty, which will cause the existing .designer.cs file to be deleted &lt;/LI&gt;
&lt;LI&gt;Visual Studio: the VS item template adds a new .tt file to the project in the same project directory as the EDMX file &lt;BR&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_10.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=265 alt=image src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_thumb_4.png" width=325 border=0 mce_src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_thumb_4.png"&gt;&lt;/A&gt; &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Visual Studio: configures the new .tt file to process the selected EDMX file. The EDMX file to process is a replaceable parameter in the .tt file, and VS updates it to point to the selected EDMX file. Thus, the .tt file now knows which EDMX file to generate code for. &lt;BR&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_12.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=186 alt=image src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_thumb_5.png" width=244 border=0 mce_src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_thumb_5.png"&gt;&lt;/A&gt; &lt;BR&gt;[Screenshot of .tt file open in the &lt;A href="http://www.t4editor.net/" mce_href="http://www.t4editor.net/"&gt;Clarius T4 Editor Community edition for VS 2008&lt;/A&gt;] &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;User: double-clicks the .tt file in the project to open it in VS10 &lt;/LI&gt;
&lt;LI&gt;User: edits the .tt file in Visual Studio to make every Entity object implement the &lt;EM&gt;IValidate&lt;/EM&gt; interface &lt;BR&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_14.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=148 alt=image src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_thumb_6.png" width=244 border=0 mce_src="http://blogs.msdn.com/blogfiles/efdesign/WindowsLiveWriter/CustomizingEntityClasseswithT4_97EE/image_thumb_6.png"&gt;&lt;/A&gt; &lt;BR&gt;[Screenshot of .tt file open in the &lt;A href="http://www.t4editor.net/" mce_href="http://www.t4editor.net/"&gt;Clarius T4 Editor Community edition for VS 2008&lt;/A&gt;] &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;User: saves and closes .tt file &lt;/LI&gt;
&lt;LI&gt;Visual Studio: Transforms the .tt file to produce the generated classes as a child file of the .tt file &lt;/LI&gt;
&lt;LI&gt;User: notes that the generated classes (under the .tt file) implement the IValidate interface as expected &lt;/LI&gt;
&lt;LI&gt;User: switches to the EDMX file in the designer and makes some changes (e.g. add a new entity) &lt;/LI&gt;
&lt;LI&gt;User: saves EDMX file &lt;/LI&gt;
&lt;LI&gt;Visual Studio: Transforms all .tt files in the project that reference the EDMX file. As before, the generated classes are child files of the .tt files &lt;/LI&gt;&lt;/OL&gt;
&lt;H3&gt;Design&lt;/H3&gt;
&lt;P&gt;The design affects multiple parts of the Entity Framework and the Entity Designer and the key changes are described below:&lt;/P&gt;
&lt;H4&gt;Entity Framework Runtime&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;We started by creating C# and VB T4 templates to generate classes from CSDL and EDMX files &lt;/LI&gt;
&lt;LI&gt;Since the T4 engine is installed with Visual Studio and not with the.NET FX runtime, we preprocess the templates as described &lt;A href="https://blogs.msdn.com/garethj/archive/2008/11/11/dsl-2010-feature-dives-t4-preprocessing-rationale.aspx" mce_href="https://blogs.msdn.com/garethj/archive/2008/11/11/dsl-2010-feature-dives-t4-preprocessing-rationale.aspx"&gt;here&lt;/A&gt; and include the compiled code into System.Data.Entity.Design.dll &lt;/LI&gt;
&lt;LI&gt;We added a new class &lt;EM&gt;System.Data.Entity.Design.EntityCodeGenerator&lt;/EM&gt; (in System.Data.Entity.Design.dll ) that generates code using the preprocessed T4 template &lt;/LI&gt;
&lt;LI&gt;Finally, we enhanced a few runtime metadata APIs and added extension methods to load and iterate over models a lot easier. Our T4 templates make heavy use of these new methods. &lt;/LI&gt;&lt;/OL&gt;
&lt;H4&gt;Entity Designer&lt;/H4&gt;
&lt;P&gt;We took the C# and VB T4 templates used by the runtime and changed them to be more “VS friendly” as described below.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;We made the EDMX file name referenced in the T4 templates a replaceable parameter &lt;/LI&gt;
&lt;LI&gt;We created a wizard (with no GUI) that is launched by Visual Studio when the item is added to the project. The wizard does 2 things: 
&lt;OL&gt;
&lt;LI&gt;updates the EDMX file name referenced in the T4 templates and &lt;/LI&gt;
&lt;LI&gt;sets the “&lt;EM&gt;Custom Tool&lt;/EM&gt;” property of the EDMX file to empty &lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;We rolled up the T4 templates (and wizard) into standard C# and VB Visual Studio item template which are installed with VS 2010; this makes them show up in the “&lt;EM&gt;Add New Item&lt;/EM&gt;” dialog in Visual Studio &lt;/LI&gt;
&lt;LI&gt;We added a new context menu to the designer surface to launch the “&lt;EM&gt;Add New Item&lt;/EM&gt;” dialog and also added code to only show VS item templates whose names start with the prefix &lt;EM&gt;ADONETArtifactGenerator_&lt;/EM&gt; &lt;/LI&gt;
&lt;LI&gt;Our design ensures that user installed VS item templates in &lt;EM&gt;%MyDocuments%&lt;/EM&gt; as well as the VS item templates we ship in box show up in the “&lt;EM&gt;Add…New…Item&lt;/EM&gt;” dialog (per the template name prefix rule above) &lt;/LI&gt;
&lt;LI&gt;We added code to the designer that finds all .tt files related to an EDMX file and automatically transform them when the EDMX file is saved. &lt;/LI&gt;
&lt;LI&gt;Finally, we added a new property called “&lt;EM&gt;Process related T4 templates on Save&lt;/EM&gt;” on the designer surface to let users control whether or not to transform .tt files related to the EDMX file on save. &lt;/LI&gt;&lt;/OL&gt;
&lt;H4&gt;Multi Targeting considerations&lt;/H4&gt;
&lt;P&gt;As many of you are aware, VS 2010 allows developers to target FX4.0 as well as FX3.5 (and older runtimes). The T4 templates that we ship in the Visual Studio box generate code that works with the Entity Framework in .NET FX 4.0. This means the VS item templates we ship in the box will not be available for projects that target FX3.5.&lt;/P&gt;
&lt;P&gt;However, it is certainly possible (and supported) for users to create new T4 templates (and new VS item templates) that generate code from an EDMX file in projects that target FX3.5 and light up in the same experience. In fact, we might release some new templates ourselves later, on CodeGallery perhaps.&lt;/P&gt;
&lt;H4&gt;How can 3&lt;SUP&gt;rd&lt;/SUP&gt; parties plug in?&lt;/H4&gt;
&lt;P&gt;Since our design is based upon VS item templates that wrap T4 templates, we have opened the door to let 3&lt;SUP&gt;rd&lt;/SUP&gt; party code generators participate in the end-to-end experience. Our contract is straight forward and easy to implement:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Create a (C# or VB) T4 template to generate code as you desire. The T4 templates we ship in the box can be invaluable points of reference as you roll your own. &lt;/LI&gt;
&lt;LI&gt;Make the EDMX reference in your .tt file a replaceable parameter by calling it &lt;EM&gt;$edmxInputFile$&lt;/EM&gt; like we do in our .tt file. &lt;/LI&gt;
&lt;LI&gt;Wrap the .tt file in a VS item template. This is pretty easy and well documented on &lt;A href="http://msdn.microsoft.com/en-us/library/ms247069(VS.80).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms247069(VS.80).aspx"&gt;MSDN&lt;/A&gt;. You can also use the &lt;A href="http://msdn.microsoft.com/en-us/library/ms185318(VS.80).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms185318(VS.80).aspx"&gt;Export Template wizard&lt;/A&gt; included Visual Studio. Also specify additional VS item template settings such as target framework, project type, etc &lt;/LI&gt;
&lt;LI&gt;Prefix the name of your .vstemplate file with &lt;EM&gt;ADONETArtifactGenerator_&lt;/EM&gt; if you want your VS item template to show up in the “&lt;EM&gt;Add New Item&lt;/EM&gt;” dialog when it is launched from the context menu in the Entity Designer. &lt;/LI&gt;
&lt;LI&gt;You can use the wizard we ship in Visual Studio to do parameter replacement in your VS item template by adding the following to your .vstemplate file: &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;WizardExtension&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Assembly&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Microsoft.Data.Entity.Design, Version=10.0.0.0, Culture=neutral,&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;PublicKeyToken=b03f5f7f11d50a3a &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Assembly&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;FullClassName&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.AddArtifactGeneratorWizard&amp;nbsp; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;FullClassName&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;WizardExtension&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;Of course, you can also create your own wizard that does custom processing when the item is added to the project as described &lt;A href="http://msdn.microsoft.com/en-us/library/ms185301(VS.80).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms185301(VS.80).aspx"&gt;here&lt;/A&gt;. &lt;/LI&gt;
&lt;LI&gt;Create a &lt;A href="http://msdn.microsoft.com/en-us/library/aa992029(VS.80).aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa992029(VS.80).aspx"&gt;VSCONTENT&lt;/A&gt; file and zip up your custom item template &amp;amp; related files into a &lt;A href="http://msdn.microsoft.com/en-us/library/ms246580(VS.80).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms246580(VS.80).aspx"&gt;Visual Studio Content Installer (.vsi)&lt;/A&gt; file &lt;/LI&gt;
&lt;LI&gt;Upload the .vsi file someplace your customers can download it from &lt;/LI&gt;
&lt;LI&gt;Visual Studio already knows how to install .vsi files and everything you need is already available in Visual Studio. &lt;/LI&gt;&lt;/OL&gt;
&lt;H3&gt;A few key takeaways:&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;This design lets the EF team release new T4 templates outside the usual Visual Studio and .NET FX ship cycles and the experience to consume them is exactly the same.&lt;/LI&gt;
&lt;LI&gt;There are several excellent resources on the web that describe advanced T4 template scenarios and our design enables them. In fact, we expect users to leverage these resources while creating new T4 templates or customizing the ones we ship. For example, code in a custom T4 template can use the &lt;A href="http://msdn.microsoft.com/en-us/library/envdte(VS.80).aspx" mce_href="http://msdn.microsoft.com/en-us/library/envdte(VS.80).aspx"&gt;EnvDTE APIs&lt;/A&gt; to access the project system and generate outputs to multiple files.&lt;/LI&gt;
&lt;LI&gt;Over time, we expect to blog about some of these advanced scenarios and also work with MVPs, industry experts and Patterns &amp;amp; Practices to provide guidance to customers in a manner similar to the &lt;A href="http://msdn.microsoft.com/en-us/vsts2008/aa718948.aspx" mce_href="http://msdn.microsoft.com/en-us/vsts2008/aa718948.aspx"&gt;Guidance Automation Toolkit&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;Custom T4 templates can generate anything you want, not just code. For example, we have an internal prototype of a T4 template that iterates over a model and generates an HTML file with a nicely formatted report of the entities and associations in the model&lt;/LI&gt;
&lt;LI&gt;VS item templates can add multiple files to your project (more details &lt;A href="http://msdn.microsoft.com/en-us/library/ms247115(VS.80).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms247115(VS.80).aspx"&gt;here&lt;/A&gt;). This means your custom item templates can include all kinds of files (e.g. workflow files, multiple T4 files, pre-canned code files, etc). For example, you can easily imagine a 3&lt;SUP&gt;rd&lt;/SUP&gt; party VS item template that adds 2 .tt files in your project that process the same EDMX file but generate different kinds of outputs.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;We hope this gives you an overview of our design and intent of this feature and we would love to hear your comments.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Sanjay Nagamangalam,&lt;/STRONG&gt; &lt;BR&gt;Lead PM, ADO.NET Entity Designer&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;/EM&gt;&lt;/STRONG&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;STRONG&gt;&lt;EM&gt;&lt;FONT color=#4c6d7e&gt;this post&lt;/FONT&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;STRONG&gt;&lt;EM&gt;. &lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9370115" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework/">Entity Framework</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Customization/">Customization</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Designer/">Designer</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+4/">Entity Framework 4</category></item><item><title>Update on Computed Properties</title><link>http://blogs.msdn.com/b/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>11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/efdesign/rsscomments.aspx?WeblogPostID=9312717</wfw:commentRss><comments>http://blogs.msdn.com/b/efdesign/archive/2009/01/13/update-on-computed-properties.aspx#comments</comments><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/b/efdesign/archive/tags/EDM/">EDM</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Reporting/">Reporting</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Functions/">Functions</category><category domain="http://blogs.msdn.com/b/efdesign/archive/tags/Entity+Framework+4/">Entity Framework 4</category></item></channel></rss>