2012-04-14 35 views
1

我想使用自定义数据库初始值设定项来播种一些数据,但无法使其工作。我试着给appConfig文件添加一些配置,但是这也不起作用。在自定义数据库初始值设定项中播种数据将不起作用/ EF,Code First

这是一个WPF应用程序,我不想引用我的EntityLibrary。我想使用上下文的构造函数来播种数据。它出什么问题了?

编辑:问题是没有数据填充。调试时,我看到上下文的构造函数SetInitiazlier函数被调用,但被覆盖的Seed方法永远不会被调用,实际上调试器永远不会进入Seed方法。

与此同时,XAML解析器给出了一个抱怨 DropCreateDatabaseIfModelChanges的TContext类型参数的错误。因为我没有家里的代码,所以我无法给出确切的错误。

这是我的自定义初始化:

public class DbInitializer : DropCreateDatabaseIfModelChanges<DemirbaşContext> 
    { 
     protected override void Seed(DemirbaşContext context) 
     { 
      Kullanıcı kullanıcı = new Kullanıcı 
      { 
       Ad = "Mert", 
       Soyad = "Mert", 
       KullanıcıAdı = "admin", 
       Şifre = "password", 
       Email = "[email protected]" 
      }; 

      context.Kullanıcılar.Add(kullanıcı); 
      context.SaveChanges(); 

      base.Seed(context); 
     } 
    } 

这是我的上下文构造:

public DemirbaşContext():base("Demirbaş") 
    { 
     Database.SetInitializer<DemirbaşContext>(new DbInitializer()); 
    } 

编辑1:这里是我当前的代码,但它仍然没有播种数据。你能看到有什么问题吗?

初始化程序:

public class DbInitializer : DropCreateDatabaseIfModelChanges<DemirbaşContext> 
{ 
    protected override void Seed(DemirbaşContext context) 
    { 
     Kullanıcı kullanıcı = new Kullanıcı 
     { 
      Ad = "Mert", 
      Soyad = "Mert", 
      KullanıcıAdı = "admin", 
      Şifre = "password", 
      Email = "[email protected]" 
     }; 

     context.Kullanıcılar.Add(kullanıcı); 
     context.SaveChanges(); 

    } 
} 

应用程序启动:

public partial class App : Application 
    { 
     public App() 
     { 
      // Seed data, remove after getting seeding in custom db initiazlier to work 
      DemirbaşContext context = new DemirbaşContext(); 
      DbInitializer initializer = new DbInitializer(); 
      Database.SetInitializer<DemirbaşContext>(initializer); 
      context.Database.Initialize(false); 
     } 
    } 
+1

*我试图使用自定义数据库初始值设定项来播种一些数据,但无法使其工作。我尝试将一些配置添加到appConfig文件,但这也不起作用。*不是对问题的描述。每次我看到*它不工作*没有解释真正发生了什么(例外,没有数据库,没有数据等)我正在考虑downvoting和投票结束这个问题为“不是一个真正的问题”。提出一个好的描述性问题是获得答案的必要步骤。 – 2012-04-14 10:15:19

+0

你说得对。我编辑了这个问题。我希望现在更清楚。 – 2012-04-14 12:36:10

+0

你有没有在你的应用程序中使用过EF?从数据库加载东西或存储到数据库的东西? – 2012-04-14 13:03:14

回答

3

移动你的初始化代码到你的应用程序的启动。它不属于上下文的构造函数,并强制手动初始化:

Database.SetInitializer<DemirbaşContext>(new DbInitializer()); 
context.Database.Initialize(false); 
+0

EF 4.3.1中的数据库类中没有Initialize方法,我认为它带有5.0 Beta。 4.3.1有什么选择? – 2012-04-16 06:23:58

+0

对不起。这是实例方法 - 我修改了答案。 – 2012-04-16 08:03:20

相关问题