2012-01-27 11 views
5

का उपयोग कर इस डेटाबेस को कॉन्फ़िगर करने का उपयोग कर कोड im है इकाई की रूपरेखा 4.1 लेज़ी लोड हो रहा है अक्षम करें,:मैं कैसे कोड माइग्रेशन विन्यास

internal sealed class Configuration : DbMigrationsConfiguration<DataStore> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
     SetSqlGenerator("System.Data.SqlServerCe.4.0", new SqlCeModelColumnBugWorkaroundProvider()); 

    } 

    protected override void OnSeed(DbContext context) 
    { 
     context.Configuration.LazyLoadingEnabled = false; 
     new SeedData(context as DataStore); 
    } 

    public static void DoDatabaseInitialisation() 
    { 
     var setting = ConfigurationManager.AppSettings["RequiresDbUpdate"]; 
     var requiresDbUpdate = bool.Parse(string.IsNullOrEmpty(setting) ? "false" : setting); 

     if (! requiresDbUpdate) return; 

     //otherwise create/update the database 
     var dbMigrator = new DbMigrator(new Configuration()); 
     dbMigrator.Update(); 

     ResetDbUpdateRequired("/"); 
    } 

    private static void ResetDbUpdateRequired(string appPath) 
    { 
     var hostName = WebHelper.GetHost(false); 

     if (!hostName.Contains("localhost")) 
      WebHelper.UpdateWebConfigAppSetting("RequiresDbUpdate", "false", appPath); 
    } 

किसी को भी ऐसा करने के तरीके जानता है, तो कृपया मुझे बताएं। मैंने मॉडल कक्षाओं पर गैर-वर्चुअल गुणों का भी प्रयास किया है, लेकिन ऐसा कोई फर्क नहीं पड़ता है।

उत्तर

3

मैं हमेशा DbContext तरीकों का उपयोग कर से पहले

context.Configuration.LazyLoadingEnabled = false; 

यह बुला का उपयोग किया है, एक बराबर सेटिंग यह है:

(context as IObjectContextAdapter).ObjectContext.ContextOptions.LazyLoadingEnabled = false; 
+0

हाँ मैंने पहले से ही इस विधि को आजमाया है, यह पहले माइग्रेशन सामग्री कोड के बिना सही तरीके से काम करता है। तो मुझे लगता है कि ऐसा कुछ करने के लिए है कि यह क्यों काम नहीं कर रहा है ... – woz

1

मैक्स की समाधान बिंदु से दूर नहीं है। असल में मुझे एक अलग स्थान या समाधान देखने के लिए प्रेरित किया। ऐसा लगता है कि आप ईएफ कोड का उपयोग कर सकते हैं, हाँ? इसलिए, आपके संदर्भ के आरंभ में, 'ऑनमोडेलक्रेटेड' का ओवरराइड है।

इस विधि में, मैंने बस संपत्ति को बुलाया और सेट किया और सभी को हल किया गया।

protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
    base.Configuration.LazyLoadingEnabled = false; 
} 

मेरा मॉडल अब और अधिक आकर्षक है। आलसी लोडिंग बहुत बढ़िया है ... लेकिन जब आप इसे नहीं चाहते हैं। और जब आप परिपत्र संदर्भ प्राप्त करना शुरू करते हैं, तो यह सिर्फ हास्यास्पद है।

संबंधित मुद्दे