为什么不调用种子方法?

Why is the seed method not being called?

我正在编写一个 MVC 5 互联网应用程序,并希望获得一些帮助来执行种子方法以使用一些实体填充数据库。

这是我的 DbContext 代码:

public class CanFindLocationDatabaseContext : DbContext
{
    public class SystemInitializer : CreateDatabaseIfNotExists<CanFindLocationDatabaseContext>
    {
        protected override void Seed(CanFindLocationDatabaseContext context)
        {

        }
    }   
}

在我的 Application_Start 方法中,我有以下代码:

System.Data.Entity.Database.SetInitializer<CanFindLocationDatabaseContext>(new CanFindLocation.Context.CanFindLocationDatabaseContext.SystemInitializer());

当我访问 CanFindLocationDatabaseContext class 中的任何 DbSet 对象时,未执行种子方法。我测试种子码之前没有数据库

正在创建数据库,正在创建表,但没有调用seed方法,所有表中都没有数据。

我在同一项目中还有以下身份 2.1 代码:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("CanFindLocationDatabaseContext", throwIfV1Schema: false)
    {
    }
}

为此 DbContext class 调用了 seed 方法,但未为 CanFindLocationDatabaseContext.

为什么会这样,我该如何编写代码才能执行 seed 方法?

提前致谢。

数据库是延迟加载的,只有在访问时才会创建,所以如果你需要它来做种,你需要访问 Seed() 中的上下文,或者你可以添加:

System.Data.Entity.Database.SetInitializer<CanFindLocationDatabaseContext>(new CanFindLocation.Context.CanFindLocationDatabaseContext.SystemInitializer());
var db = new CanFindLocationDatabaseContext()
db.Database.Initialize(true);   // force database creation

https://msdn.microsoft.com/en-us/library/system.data.entity.database.initialize(v=vs.113).aspx

一直以来我都认为 seed 方法没有被调用是我的错。我最初将 launchSettings.json 中的 "launchBrowser" 属性 设置为 false,所以我只是将其更改为 true 并且它已解决...数据库已播种!