2015-05-19 116 views
2

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

我假设您确定数据库不存在? –

+0

数据库不存在。 – user3736648

+0

确保您在启动调试之前重置IIS或停止您的ASP Developpement服务器或者Visual不会停止并重新启动您的应用程序并阻止Application_Start执行。 –

回答

2

数据库是懒加载并访问时,才会创建,因此,如果您需要它播种所需的种子(内无论是访问上下文),或者你可以添加:

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

相关问题