<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Entity Framework</title>
        <link>http://blogs.ugidotnet.org:443/dsantarelli/category/Entity Framework.aspx</link>
        <description>Entity Framework</description>
        <language>it-IT</language>
        <copyright>Dario Santarelli</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>[Entity Framework v4] Creazione dei tipi proxy</title>
            <link>http://blogs.ugidotnet.org:443/dsantarelli/archive/2011/11/27/entity-framework-v4-creazione-dei-tipi-proxy.aspx</link>
            <description>&lt;p&gt;L’approccio &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd456853.aspx"&gt;POCO&lt;/a&gt; di Entity Framework v4 permette di applicare la persistence-ignorance anche su oggetti custom attraverso la creazione a runtime (via &lt;a href="http://msdn.microsoft.com/en-us/library/3y322t50.aspx"&gt;Reflection.Emit&lt;/a&gt;) di proxy dinamici che li derivano in modo da permettere all’EF di implementarci sopra i suoi meccanismi di change tracking e lazy loading. In particolare, il change tracking è una feature che un oggetto proxy potrebbe continuare a mantenere anche quando attraversa tier diversi, il che ovviamente sposta l’attenzione verso problematiche legate alla serializzazione di oggetti il cui tipo effettivo non è disponibile a compile time. &lt;/p&gt;
&lt;p&gt;Ad esempio, se volessimo serializzare e deserializzare su tier diversi un nostro oggetto &lt;em&gt;Customer&lt;/em&gt;, il processo che si troverebbe a deserializzare il corrispondente tipo proxy autogenerato dall’EF dovrebbe essere in grado di riconoscere un oggetto di tipo...&lt;/p&gt;
&lt;p&gt;&lt;em&gt;System.Data.Entity.DynamicProxies.Customer_1941BFC82D29CB600101CF80564EA2CCAE83E1ACF5EF4B32E482FBDF13337DC9&lt;/em&gt; &lt;/p&gt;
&lt;p&gt;definito nell’assembly (fittizio)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;EntityFrameworkDynamicProxies-&amp;lt;NostroAssembly&amp;gt;, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;che ovviamente non è un “known type” nel suo AppDomain.   &lt;br /&gt;
&lt;br /&gt;
Ora, se utilizzassimo WCF come infrastruttura di comunicazione, non avremmo alcuna feature “gratis” per serializzare e deserializzare direttamente i tipi proxy di EF poiché il &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx"&gt;DataContractSerializer&lt;/a&gt; è in grado di gestire solo “known types” e purtroppo i proxy dinamici non lo sono. Quindi, le principali opzioni per aggirare il problema sono:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Disabiltare la creazione dei proxy tramite la proprietà &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontextoptions.proxycreationenabled.aspx"&gt;ProxyCreationEnabled&lt;/a&gt; (es. &lt;em&gt;context.ContextOptions.ProxyCreationEnabled = false;&lt;/em&gt;) in modo da lavorare direttamente sui known types, ma perdendo ovviamente il change tracking automatico di EF.&lt;/li&gt;
    &lt;li&gt;Usare la classe &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.proxydatacontractresolver.aspx"&gt;ProxyDataContractResolver&lt;/a&gt; per mappare i tipi proxy direttamente sui nostri tipi custom (&lt;a target="_blank" href="http://blogs.msdn.com/b/adonet/archive/2010/01/05/poco-proxies-part-2-serializing-poco-proxies.aspx"&gt;esempio&lt;/a&gt;) che però a quel punto non supporterebbero più né il change tracking né tantomeno il lazy loading di EF. Soluzione sicuramente migliore per continuare a mantenere il change tracking su più tier è far riferimento a “self-tracking entities” ovvero ad oggetti che non hanno nessuna dipendenza con EF e definiscono internamente la loro logica di change tracking (ad esempio implementando l’interfaccia &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx"&gt;INotifyPropertyChanged&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Senza WCF c’è sempre la serializzazione “old-fashioned”. Ad esempio quella binaria. Affinché i tipi proxy siano resi disponibili alla deserializzazione binaria, EF ci espone un metodo &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.createproxytypes.aspx"&gt;CreateProxyTypes&lt;/a&gt; sull’oggetto ObjectContext per assicurare che i tipi proxy relativi ad un dato &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.data.metadata.edm.metadataworkspace.aspx"&gt;MetadataWorkspace&lt;/a&gt; siano deserializzabili all’interno di un AppDomain diverso da quello che invece li serializza. Occorre tenere a mente che la deserializzazione dei proxy ricostruisce degli oggetti che ovviamente non mantengono il loro comportamento originale (quindi niente change tracking). &lt;/p&gt;
&lt;p&gt;Il seguente metodo, invocato ad esempio allo startup di una applicazione, è in grado di scatenare nell'AppDomain corrente la creazione di tutti i tipi proxy corrispondenti alle entity definite negli EDM (&lt;em&gt;Entity Data Model&lt;/em&gt;) deployati come risorse all’interno di una lista di assembly, in modo che il &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatters.binary.binaryformatter.aspx"&gt;BinaryFormatter&lt;/a&gt; sia poi in grado di trattare tali tipi come “known types”.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;public static void &lt;/span&gt;CreateProxyTypes(&lt;span style="color: rgb(43, 145, 175);"&gt;Assembly&lt;/span&gt;[] assembliesToConsider) &lt;br /&gt;{&lt;/pre&gt;
&lt;pre class="code"&gt;   &lt;span style="color: blue;"&gt;var &lt;/span&gt;metadataWorkspace = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;MetadataWorkspace&lt;/span&gt;(&lt;span style="color: blue;"&gt;new string&lt;/span&gt;[] { &lt;span style="color: rgb(163, 21, 21);"&gt;"res://*/" &lt;/span&gt;}, assembliesToConsider);     &lt;br /&gt;   &lt;span style="color: blue;"&gt;using &lt;/span&gt;(&lt;span style="color: blue;"&gt;var &lt;/span&gt;entityConnection = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;EntityConnection&lt;/span&gt;(metadataWorkspace, &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;SqlConnection&lt;/span&gt;()))     &lt;br /&gt;   {         &lt;br /&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;ObjectContext&lt;/span&gt;(entityConnection))         &lt;br /&gt;     {             &lt;br /&gt;        &lt;span style="color: blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color: blue;"&gt;var &lt;/span&gt;assembly &lt;span style="color: blue;"&gt;in &lt;/span&gt;assembliesToConsider)             &lt;br /&gt;        {                 &lt;br /&gt;          context.CreateProxyTypes(assembly.GetTypes());             &lt;br /&gt;        }                             &lt;br /&gt;     }     &lt;br /&gt;   } &lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Da notare come la classe &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.aspx"&gt;EntityConnection&lt;/a&gt; richieda nel costruttore una connessione ad un data source che ai nostri fini però non è importante specificare. Per questo viene passata una SqlConnection “vuota”. Ciò che conta è referenziare gli EDM deployati come risorse all’interno degli assembly specificati. CreateProxyTypes è un metodo intelligente in quanto è in grado di ignorare tutti i tipi che non sono rappresentati negli EDM, quindi possiamo tranquillamente passargli come argomento tutti i tipi definiti all’interno di un assembly: esso internamente sarà in grado di controllare la sua cache di tipi e di trasformare in known types soltanto i tipi proxy di EF che ancora non sono stati creati. Per avere controprova dei tipi proxy correntemente registrati nel nostro AppDomain, basta chiamare il metodo statico &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.getknownproxytypes.aspx"&gt;ObjectContext.GetKnownProxyTypes()&lt;/a&gt;. &lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:bf7843cd-c0a7-4084-8871-1198d539fdeb" style="margin: 0px; padding: 0px; float: none; display: inline;"&gt;Technorati tags: &lt;a rel="tag" href="http://technorati.com/tags/EntityFramework"&gt;EntityFramework&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Serialization"&gt;Serialization&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/DynamicProxy"&gt;DynamicProxy&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org:443/dsantarelli/aggbug/100561.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org:443/dsantarelli/archive/2011/11/27/entity-framework-v4-creazione-dei-tipi-proxy.aspx</guid>
            <pubDate>Sun, 27 Nov 2011 20:55:21 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org:443/dsantarelli/archive/2011/11/27/entity-framework-v4-creazione-dei-tipi-proxy.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org:443/dsantarelli/comments/commentRss/100561.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org:443/dsantarelli/services/trackbacks/100561.aspx</trackback:ping>
        </item>
        <item>
            <title>[Entity Framework] Gestione runtime dei metadati</title>
            <link>http://blogs.ugidotnet.org:443/dsantarelli/archive/2010/01/30/entity-framework-gestione-runtime-dei-metadati.aspx</link>
            <description>&lt;p&gt;Il comportamento di default del wizard dell’EF accorpa i metadati del modello come risorse del nostro assembly e inserisce una stringa di connessione nell’ app.config o nel web.config in modo da referenziare a runtime tali risorse:    &lt;br /&gt;    &lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: #a31515; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;connectionStrings&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&amp;gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: #a31515; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;add&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: red; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;name&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;=&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;"&lt;span style="color: blue"&gt;NorthwindEntities&lt;/span&gt;"&lt;span style="color: blue"&gt;        &lt;br /&gt;     &lt;/span&gt;&lt;span style="color: red"&gt;connectionString&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;&lt;strong&gt;metadata=res://*/NorthwindModel.csdl|res://*/NorthwindModel.ssdl|res://*/NorthwindModel.msl;...&lt;/strong&gt;&lt;/span&gt;"       &lt;br /&gt;     &lt;span style="color: red"&gt;providerName&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;System.Data.EntityClient&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 8pt; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; color: #a31515; font-size: 8pt; mso-no-proof: yes"&gt;connectionStrings&lt;/span&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 8pt; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Tuttavia, “embeddare” i metadati del nostro modello come risorsa dell’assembly può costituire un limite: infatti sorgerebbero dei problemi qualora volessimo&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;esporre i metadati alla modifica di agenti esterni &lt;/li&gt;    &lt;li&gt;referenziare tramite connection string dei metadati definiti altrove sul file system &lt;/li&gt;    &lt;li&gt;caricare i metadati on-demand magari leggendoli da stream di rete&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Infatti, esistono dei casi in cui può essere utile distinguere tra metadati di test e metadati di produzione o comunque prevedere delle politiche che possano richiedere storage model (SSDL) e mapping model (MSL) diversi, pur mantenendo l’integrità del modello concettuale (CSDL) utilizzato dallo sviluppatore.&lt;/p&gt;  &lt;p&gt;Una prassi molto comune è impostare l’opzione &lt;em&gt;'&lt;strong&gt;Metadata Artifact Processing&lt;/strong&gt;&lt;/em&gt;' del designer a '&lt;em&gt;&lt;strong&gt;Copy to Output Directory&lt;/strong&gt;&lt;/em&gt;'.  &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/dsantarelli/WindowsLiveWriter/EntityFrameworkGestioneruntimedeimetadat_124D3/immaginejz%5B1%5D_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="immaginejz[1]" border="0" alt="immaginejz[1]" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/dsantarelli/WindowsLiveWriter/EntityFrameworkGestioneruntimedeimetadat_124D3/immaginejz%5B1%5D_thumb.jpg" width="244" height="115" /&gt;&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;In questo modo nella bin del nostro progetto troviamo i metadati SSDL, MSL e CSDL separati fisicamente dalla .dll di output.     &lt;br /&gt;Quindi abbiamo già raggiunto l’obiettivo di poter modificare i metadati (solitamente SSDL e MSL) senza dover ricompilare la nostra applicazione. A questo punto possiamo scegliere di modificare la nostra connection string in modo che punti al corretto insieme di file:     &lt;br /&gt;    &lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;string&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; connectionString = &lt;span style="color: #a31515"&gt;@"&lt;strong&gt;metadata=.\NorthwindModel.csdl|.\NorthwindModel.ssdl|.\NorthwindModel.msl&lt;/strong&gt;;         &lt;br /&gt;                            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: #a31515; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;provider=System.Data.SqlClient; provider connection string=""...&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: #a31515; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;"" "&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;;     &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;NorthwindContext&lt;/span&gt; context = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;NorthwindContext&lt;/span&gt;(connectionString)) &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;{ ... &lt;/span&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-no-proof: yes"&gt;}&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Uno step ulteriore che si può prevedere è il caricamento dinamico di metadati non soltanto da una locazione fisica su file system, ma anche da un generico stream (es. da un web server via HTTP). A riguardo, il seguente esempio mostra come caricare dinamicamente CSDL, SSDL e MSL in modo da creare un oggetto di tipo &lt;a href="http://msdn.microsoft.com/it-it/library/system.data.entityclient.entityconnection.aspx" target="_blank"&gt;EntityConnection&lt;/a&gt; da passare al nostro ObjectContext: &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; color: green; font-size: 8pt; mso-no-proof: yes"&gt;     &lt;br /&gt;// Get CSDL/SSDL/MSL from a generic stream ...      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;string&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt; csdl = &lt;span style="color: #a31515"&gt;"&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&amp;lt;Schema...&amp;lt;/Schema&amp;gt;"&lt;/span&gt;;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt; ssdl = &lt;span style="color: #a31515"&gt;"&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&amp;lt;Schema...&amp;lt;/Schema&amp;gt;"&lt;/span&gt;;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt; msl = &lt;span style="color: #a31515"&gt;"&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&amp;lt;Mapping...&amp;lt;/Mapping&amp;gt;"&lt;/span&gt;;      &lt;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: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: #2b91af"&gt;XmlTextReader&lt;/span&gt; csdlXmlReader = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XmlTextReader&lt;/span&gt;(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;StringReader&lt;/span&gt;(csdl));      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: #2b91af"&gt;XmlTextReader&lt;/span&gt; ssdlXmlReader = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XmlTextReader&lt;/span&gt;(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;StringReader&lt;/span&gt;(ssdl));      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: #2b91af"&gt;XmlTextReader&lt;/span&gt; mslXmlReader = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XmlTextReader&lt;/span&gt;(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;StringReader&lt;/span&gt;(msl));      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: #2b91af"&gt;EdmItemCollection&lt;/span&gt; edmItemCollection = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EdmItemCollection&lt;/span&gt;(&lt;span style="color: blue"&gt;new&lt;/span&gt;[] { csdlXmlReader });      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: #2b91af"&gt;StoreItemCollection&lt;/span&gt; storeItemCollection = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;StoreItemCollection&lt;/span&gt;(&lt;span style="color: blue"&gt;new&lt;/span&gt;[] { ssdlXmlReader });      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: #2b91af"&gt;StorageMappingItemCollection&lt;/span&gt; storageMappingItemCollection = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;StorageMappingItemCollection&lt;/span&gt;(edmItemCollection, storeItemCollection, &lt;span style="color: blue"&gt;new&lt;/span&gt;[] { mslXmlReader });      &lt;br /&gt;      &lt;p&gt;       &lt;br /&gt;&lt;/p&gt;   &lt;/span&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; color: green; font-size: 8pt; mso-no-proof: yes"&gt;// Create the metadata workspace for the EntityConnection ...     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: #2b91af"&gt;MetadataWorkspace&lt;/span&gt; metadataWorkspace = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MetadataWorkspace&lt;/span&gt;();      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;metadataWorkspace.RegisterItemCollection(edmItemCollection);     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;metadataWorkspace.RegisterItemCollection(storeItemCollection);     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;metadataWorkspace.RegisterItemCollection(storageMappingItemCollection);     &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt; sqlConnectionString = &lt;span style="color: #a31515"&gt;@"Data Source=.\SQLSRV08;Initial Catalog=Northwind;User ID=XXX;Password=XXX;"&lt;/span&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: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: #2b91af"&gt;EntityConnection&lt;/span&gt; entityConnection = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EntityConnection&lt;/span&gt;(metadataWorkspace,&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SqlConnection&lt;/span&gt;(sqlConnectionString));      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;NorthwindContext&lt;/span&gt; context = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;NorthwindContext&lt;/span&gt;(entityConnection)) &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: en-us; mso-no-proof: yes" lang="EN-US"&gt;{ ... &lt;/span&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-no-proof: yes"&gt;}     &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6de21075-0887-4062-aded-878384be6ca9" class="wlWriterEditableSmartContent"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/Entity+Framework" rel="tag"&gt;Entity Framework&lt;/a&gt;,&lt;a href="http://technorati.com/tags/EF" rel="tag"&gt;EF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/metadati" rel="tag"&gt;metadati&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org:443/dsantarelli/aggbug/97926.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dario Santarelli</dc:creator>
            <guid>http://blogs.ugidotnet.org:443/dsantarelli/archive/2010/01/30/entity-framework-gestione-runtime-dei-metadati.aspx</guid>
            <pubDate>Sat, 30 Jan 2010 17:49:43 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org:443/dsantarelli/archive/2010/01/30/entity-framework-gestione-runtime-dei-metadati.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org:443/dsantarelli/comments/commentRss/97926.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org:443/dsantarelli/services/trackbacks/97926.aspx</trackback:ping>
        </item>
    </channel>
</rss>