<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>EntityFramework</title>
        <link>http://blogs.ugidotnet.org/ainotame/category/EntityFramework.aspx</link>
        <description>EntityFramework</description>
        <language>it</language>
        <copyright>Roberto Sarati</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>EF 5 - IS NULL &amp;lt;&amp;gt; = NULL</title>
            <link>http://blogs.ugidotnet.org/ainotame/archive/2013/05/17/ef-5-is-null-ltgt-null.aspx</link>
            <description>&lt;p&gt;EF 5 aggiunge una importante opzione di configurazione riguardante la "traduzione" delle lambda con parametri NULL: UseCSharpNullComparisonBehavior.    &lt;br /&gt;Se impostata a true, il comportamento è simile al comportamento che noi Dev siamo abituati con il valore null di C#. Ma andiamo con ordine:&lt;/p&gt;  &lt;p&gt;Tabella:    &lt;br /&gt;Id    Name     &lt;br /&gt;1    Uno     &lt;br /&gt;2    NULL     &lt;br /&gt;3    NULL     &lt;br /&gt;4    due     &lt;br /&gt;5    tre&lt;/p&gt;  &lt;p&gt;Codice:    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;result = db.NullableTables.Where(e =&amp;gt; e.Name == null).Count();    &lt;br /&gt;Console.WriteLine("Entries where Name=null: {0}", result);     &lt;br /&gt;                &lt;br /&gt;result = db.NullableTables.Where(e =&amp;gt; e.Name != null).Count();     &lt;br /&gt;Console.WriteLine("Entries where Name!=null: {0}", result);     &lt;br /&gt;                &lt;br /&gt;string name = null;     &lt;br /&gt;result = db.NullableTables.Where(e =&amp;gt; e.Name == name).Count();     &lt;br /&gt;Console.WriteLine("Entries where Name==name &amp;amp; name=null: {0}", result);&lt;/p&gt;  &lt;p&gt;Risultato standard:    &lt;br /&gt;"Entries where Name=null: 2" //corretto     &lt;br /&gt;"Entries where Name!=null: 3" //corretto     &lt;br /&gt;"Entries where Name=name &amp;amp;amp; name=null: 0" //wrong?&lt;/p&gt;  &lt;p&gt;Il problema dell'ultimo risultato riguarda il metodo utilizzato da EF per convertire la lamba expression "e=&amp;amp;gt;e.Name=name" in TSQL: "Where Name=@p1, @p1=null". In SQL =NULL è sempre false, al contrario del primo esempio dove EF converte la lambda in "where Name IS NULL".&lt;/p&gt;  &lt;p&gt;Come possiamo rendere la conversione più C# friendly? con la seguente istruzione (messa nel costruttore del nostro DbContext):    &lt;br /&gt;((IObjectContextAdapter)this).ObjectContext.ContextOptions.UseCSharpNullComparisonBehavior = true;&lt;/p&gt;  &lt;p&gt;In questo caso, rieseguendo il codice precedente, otterremo il seguente risultato:    &lt;br /&gt;"Entries where Name=null: 2" //corretto     &lt;br /&gt;"Entries where Name!=null: 3" //corretto     &lt;br /&gt;"Entries where Name=name &amp;amp;amp; name=null: 2" //corretto?&lt;/p&gt;  &lt;p&gt;Da notare come questa opzione sia disabilitata di default(causa compatibilità).&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/ainotame/aggbug/101559.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Roberto Sarati</dc:creator>
            <guid>http://blogs.ugidotnet.org/ainotame/archive/2013/05/17/ef-5-is-null-ltgt-null.aspx</guid>
            <pubDate>Fri, 17 May 2013 22:33:13 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/ainotame/archive/2013/05/17/ef-5-is-null-ltgt-null.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/ainotame/comments/commentRss/101559.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/ainotame/services/trackbacks/101559.aspx</trackback:ping>
        </item>
        <item>
            <title>EF CodeFirst Load data</title>
            <link>http://blogs.ugidotnet.org/ainotame/archive/2012/03/21/ef-codefirst-load-data.aspx</link>
            <description>&lt;p&gt;Capita, soprattutto nel metodo Seed del IDatabaseInitializer&amp;lt;CTX&amp;gt; o nel nuovo DbMigrationsConfigurations&amp;lt;CTX&amp;gt;, di caricare una certa quantità di dati passando dal DbContext (nel mio caso da una piccola applicazione che parsa alcuni file).&lt;/p&gt;
&lt;p&gt;Se questa quantità di dati è cospiqua (10000 oggetti), ci si potrebbe ritrovare a perdere un po' di tempo (2 minuti) aspettando che vengano aggiunti al contesto tutti i dati (non sto parlando del tempo di salvataggio, ma di aggiunta al contesto).&lt;br /&gt;
Ciò è dovuto al fatto che ogni chiamata al metodo DbSet&amp;lt;Entity&amp;gt;.Add(new object()) chiama implicitamente ObjectContext.DetectChanges().&lt;/p&gt;
&lt;p&gt;Per evitare questo, basta impostare:&lt;/p&gt;
&lt;p&gt;Context.Configuration.AutoDetectChangesEnabled = false;&lt;/p&gt;
&lt;p&gt;Attenzione tuttavia all'uso: "these options are advanced and can potentially introduce subtle bugs into your application if not used correctly" &lt;a href="http://msdn.microsoft.com/en-us/library/gg696177%28v=vs.103%29.aspx"&gt;MSDN&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/ainotame/aggbug/100881.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Roberto Sarati</dc:creator>
            <guid>http://blogs.ugidotnet.org/ainotame/archive/2012/03/21/ef-codefirst-load-data.aspx</guid>
            <pubDate>Wed, 21 Mar 2012 13:07:43 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/ainotame/archive/2012/03/21/ef-codefirst-load-data.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/ainotame/comments/commentRss/100881.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/ainotame/services/trackbacks/100881.aspx</trackback:ping>
        </item>
        <item>
            <title>[LightSwitch] Utilizzare l'ObjectContext ApplicationData da WCF Ria Service</title>
            <link>http://blogs.ugidotnet.org/ainotame/archive/2011/11/30/lightswitch-utilizzare-lobjectcontext-applicationdata-da-wcf-ria-service.aspx</link>
            <description>&lt;p&gt;LightSwitch permette di creare/gestire un database al suo interno senza utilizzare strumenti esterni. Questo DB è chiamato ApplicationData e verrà generato in produzione, in fase di deploy, utilizzando una connection string &lt;a target="_blank" href="http://www.lightswitch.it/Contenuti/VediArticoli/tabid/136/ArticleId/61/LightSwitch-Publish-Wizard.aspx"&gt;impostata tramite widzard&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cosa avviene in pratica:&lt;/p&gt;
&lt;p&gt; - La connessione viene memorizzata, sempre con lo stesso nome "_IntrinsicData", all'interno del web.config deployato.&lt;br /&gt;
 - l'ObjectContext di EF viene autogenerato nel file ServerGenerated\GeneratedArtifacts\ApplicationData.cs&lt;/p&gt;
&lt;p&gt;Per utilizzare l'ObjectContext in un WCF Ria Service quindi basta:&lt;br /&gt;
 - Aggiungere il file al progetto WCF Service (As Link dato che verrà rigenerato)&lt;br /&gt;
 - Recuperare l'ObjectContext nel seguente modo:&lt;/p&gt;
&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;EntityConnectionStringBuilder&lt;/span&gt; builder = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;EntityConnectionStringBuilder&lt;/span&gt;();&lt;br /&gt;builder.Metadata =&lt;br /&gt;  &lt;span style="color: rgb(163, 21, 21);"&gt;"res://*/ApplicationData.csdl|res://*/ApplicationData.ssdl|res://*/ApplicationData.msl"&lt;/span&gt;;&lt;br /&gt;builder.Provider = &lt;span style="color: rgb(163, 21, 21);"&gt;"System.Data.SqlClient"&lt;/span&gt;;&lt;br /&gt;builder.ProviderConnectionString =&lt;br /&gt;  &lt;span style="color: rgb(43, 145, 175);"&gt;WebConfigurationManager&lt;/span&gt;.ConnectionStrings[&lt;span style="color: rgb(163, 21, 21);"&gt;"&lt;strong&gt;_IntrinsicData&lt;/strong&gt;"&lt;/span&gt;].ConnectionString;&lt;br /&gt;&lt;span style="color: blue;"&gt;var c&lt;/span&gt;ontext = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;&lt;strong&gt;ApplicationDataObjectContext&lt;/strong&gt;&lt;/span&gt;(builder.ConnectionString);&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
In questo modo è possibile:&lt;br /&gt;
 - eseguire query complesse sul nostro db applicativo (quelle supportate dal provider di EF)&lt;br /&gt;
 - sopperire alle "mancanze espressive" delle query linq generate in LightSwitch e poter utilizzare entità custom definite nella nostra libreria (per esempio a fine reportistici)&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/ainotame/aggbug/100578.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Roberto Sarati</dc:creator>
            <guid>http://blogs.ugidotnet.org/ainotame/archive/2011/11/30/lightswitch-utilizzare-lobjectcontext-applicationdata-da-wcf-ria-service.aspx</guid>
            <pubDate>Wed, 30 Nov 2011 00:20:38 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/ainotame/archive/2011/11/30/lightswitch-utilizzare-lobjectcontext-applicationdata-da-wcf-ria-service.aspx#feedback</comments>
            <slash:comments>40</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/ainotame/comments/commentRss/100578.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/ainotame/services/trackbacks/100578.aspx</trackback:ping>
        </item>
    </channel>
</rss>