2012-03-13 5 views
5

मैं डेटाबेस को फिर से शुरू करने के लिए पहले ईएफ कोड को मजबूर करने की कोशिश कर रहा हूं।ईएफ कोड पहले - हटाने के बाद सीडिंग और फिर डेटाबेस बनाना

dbContext.Database.Delete();  
dbContext.Database.Create(); 

यह एक नया डेटाबेस बनाता है लेकिन बोने रणनीति नजरअंदाज कर दिया है (> Database.SetInitializer < का उपयोग कर सेट): मेरा पहला विचार कॉल करने के लिए थे। मैं उपरोक्त एप्लीकेशन_स्टार्ट विधि में कर रहा हूं। कोई विचार?

मैं भी कोशिश की है:

dbContext.Database.Initialize(true); 
+0

आप पोस्ट कर सकते हैं अपने Database.SetInitializer <> कोड? –

उत्तर

0

एक विकल्प अपने स्वयं के DatabaseInitializer कि DropCreateDatabaseAlways से विरासत बनाने के लिए है।

इसका एक उदाहरण होगा।

public class MyInitializer : DropCreateDatabaseAlways<EmployeeContext> 
{ 
    protected override void Seed(EmployeeContext context) 
    { 
     context.Employees.Add(new Employee() {FirstName = "Marcy"}); 
     base.Seed(context); 
    } 
} 

public class EmployeeContext : DbContext 
{ 
    static EmployeeContext() 
    { 
     Database.SetInitializer(new MyInitializer()); // using my own initializer 
    } 

    public IDbSet<Employee> Employees { get; set; } 
} 
+0

हां। मैंने पहले ही ऐसा कर लिया है। लेकिन मैं इसे चलाने के लिए मजबूर नहीं कर सकता (मॉडल को बदलने के बिना।) –

0

यहाँ मैं इस पर काबू पाने के लिए क्या किया है:

  1. अपने संदर्भ प्रारंभकर्ता में एक ध्वज जोड़े

    सार्वजनिक bool WasSeeded = झूठी;

  2. अपने प्रारंभकर्ता में एक सार्वजनिक विधि बनाएं और अपना बीज कोड वहां रखें। अंत में

    context.Students.AddOrUpdate

सच

को ध्वज सेट: मैं केवल AddOrUpdate या अन्य Upsert तरीकों, अर्थात् उपयोग करने के लिए जाँच डेटा डीबी में से पहले नहीं है सुनिश्चित किया
  1. आप संदर्भ को प्रारंभ करने के बाद, ध्वज की जाँच करें और यदि यह गलत रन मैन्युअल तर्क है:

    अगर {(initializer.WasSeeded!)प्रारंभकर्ता। सईड एंड यूपीएसर्ट (संदर्भ); }

0
Database.SetInitializer(new CustomInitializer()); //CustomInitializer contains the overriding Seed method 

using (var context = new CustomDatabaseContext()) 
{ 
    context.Database.Initialize(force: true); 
} 
संबंधित मुद्दे