为什么没有调用种子方法?

时间:2015-05-19 06:36:49

标签: c# asp.net-mvc-5 entity-framework-6 dbcontext seeding

我正在编写一个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());

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

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

我在同一个项目中也有以下代码用于身份2.1:

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

为此DbContext类调用种子方法,但不为CanFindLocationDatabaseContext调用。

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

提前致谢。

2 个答案:

答案 0 :(得分:2)

数据库是延迟加载的,只有在访问时才会创建,所以如果你需要它来播种你需要访问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

答案 1 :(得分:0)

一直以来,我都以为是我的错时没有调用种子方法。我最初将"launchBrowser"中的launchSettings.json属性设置为false,所以我只是将其更改为true并得到解决...数据库已植入种子!

launchSettings.json screenshot