种子方法未调用,entity framework6

我有一个DatabaseInitializer

 public class DatabaseInitializer : CreateDatabaseIfNotExists { protected override void Seed ( DatabaseContext databaseContext ) { // Seed the hash methods. var defaultHashMethod = new HashMethod { Description = "Default", CreateDate = DateTime.Now }; databaseContext.HashMethod.Add(defaultHashMethod); databaseContext.SaveChanges(); } } 

在我的DatabaseContext类中,我设置了初始化程序

 public DatabaseContext() : base("DatabaseContext") { InitializeDatabase(); } private void InitializeDatabase() { Database.SetInitializer(new DatabaseInitializer()); if (!Database.Exists()) { Database.Initialize(true); } } 

据我所知,只有在执行查询等操作时才会调用种子方法。 我的数据库已成功创建,我正在查询表,但从不调用种子方法。

更新:

似乎这个问题是由于一个inheriting自我的DatabaseContext类的类引起的,当使用这个类来执行数据库操作时,不会调用种子方法。 使用我的DatabaseContext类时,一切都按预期工作

 public DbSet TestEntity { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); } 

您需要从Package Manager Console调用Update-Database

我能让它工作的唯一方法就是自己调用种子方法

以下是我的DatabaseContext类的方法

  public DatabaseContext() : base("DatabaseContext") { InitializeDatabase(); } public DatabaseContext(string connectionString) : base(connectionString) { Database.Connection.ConnectionString = connectionString; InitializeDatabase(); } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); } 

在这里,我改变了我的InitializeDatabase方法

 private void InitializeDatabase() { Database.SetInitializer(new DatabaseInitializer()); if (!Database.Exists()) { Database.Initialize(true); } } 

 protected virtual void InitializeDatabase() { if (!Database.Exists()) { Database.Initialize(true); new DatabaseInitializer().Seed(this); } } 

要在使用AutomaticMigration时调用Seed方法,应该为代码优先数据库使用MigrateDatabaseToLatestVersion初始化程序。
像这样:

 Database.SetInitializer(new MigrateDatabaseToLatestVersion()); 

这样,每次成功完成迁移时都会调用Seed方法。

我有这个问题,问题是我的Context构造函数没有使用与我的web.config中相同的名称。

如果您使用Code-First,那么您可以在应用程序第一次运行时填充数据。

  • 创建DbInitializer

     public class MyDbInitializer : IDatabaseInitializer { public void InitializeDatabase(MyDbContext context) { if (context.Database.Exists()) { if (!context.Database.CompatibleWithModel(true)) { context.Database.Delete(); } } context.Database.Create(); User myUser = new User() { Email = "a@b.com", Password = "secure-password" }; context.Users.AddOrUpdate(p => p.Email, myUser); context.SaveChanges(); } } 
  • 在Global.asax.cs Application_Start方法中注册此DbInitializer

     Database.SetInitializer(new My.namespace.MyDbInitializer()); 

我的种子也没被处决。 但是,这是因为我在模型中添加了一个列,我无意在实际数据库中使用它而忘记使用[NotMapped]注释。

  [NotMapped] public string Pair { get; set; } 

根本没有与此相关的错误消息。 当我尝试查询应该存在的数据时,只是对我的存储库obj的空引用。