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.
为什么会这样,我该如何编写代码以便执行种子方法?
提前致谢。
数据库是延迟加载的,只有在访问时才会创建,因此如果您需要它来播种,您需要访问 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
| 归档时间: |
|
| 查看次数: |
4780 次 |
| 最近记录: |