为什么不调用种子方法?
Why is the seed method not being called?
我正在编写一个 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());
当我访问 CanFindLocationDatabaseContext
class 中的任何 DbSet
对象时,未执行种子方法。我测试种子码之前没有数据库
正在创建数据库,正在创建表,但没有调用seed方法,所有表中都没有数据。
我在同一项目中还有以下身份 2.1 代码:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("CanFindLocationDatabaseContext", throwIfV1Schema: false)
{
}
}
为此 DbContext class 调用了 seed 方法,但未为 CanFindLocationDatabaseContext
.
为什么会这样,我该如何编写代码才能执行 seed 方法?
提前致谢。
数据库是延迟加载的,只有在访问时才会创建,所以如果你需要它来做种,你需要访问 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
一直以来我都认为 seed 方法没有被调用是我的错。我最初将 launchSettings.json
中的 "launchBrowser"
属性 设置为 false
,所以我只是将其更改为 true
并且它已解决...数据库已播种!
我正在编写一个 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());
当我访问 CanFindLocationDatabaseContext
class 中的任何 DbSet
对象时,未执行种子方法。我测试种子码之前没有数据库
正在创建数据库,正在创建表,但没有调用seed方法,所有表中都没有数据。
我在同一项目中还有以下身份 2.1 代码:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("CanFindLocationDatabaseContext", throwIfV1Schema: false)
{
}
}
为此 DbContext class 调用了 seed 方法,但未为 CanFindLocationDatabaseContext
.
为什么会这样,我该如何编写代码才能执行 seed 方法?
提前致谢。
数据库是延迟加载的,只有在访问时才会创建,所以如果你需要它来做种,你需要访问 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
一直以来我都认为 seed 方法没有被调用是我的错。我最初将 launchSettings.json
中的 "launchBrowser"
属性 设置为 false
,所以我只是将其更改为 true
并且它已解决...数据库已播种!