我正在编写一个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
调用。
为什么会这样,我如何编写代码以便执行种子方法?
提前致谢。
答案 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)