为什么不调用种子方法?

use*_*648 5 c# seeding dbcontext entity-framework-6 asp.net-mvc-5

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

这是我的DbContext代码:

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

        }
    }   
}
Run Code Online (Sandbox Code Playgroud)

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

System.Data.Entity.Database.SetInitializer<CanFindLocationDatabaseContext>(new CanFindLocation.Context.CanFindLocationDatabaseContext.SystemInitializer());
Run Code Online (Sandbox Code Playgroud)

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

正在创建数据库,正在创建表,但是没有调用seed 方法,并且任何表中都没有数据。

我在同一个项目中还有以下标识 2.1 的代码:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("CanFindLocationDatabaseContext", throwIfV1Schema: false)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

为该 DbContext 类调用种子方法,但不为CanFindLocationDatabaseContext.

为什么会这样,我该如何编写代码以便执行种子方法?

提前致谢。

Ste*_*ene 3

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

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

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