我如何处理在应用程序启动前或数据库生成后需要预先存在的数据的情况.例如,我有一个列表,在代码第一次生成数据库后,我想将其中的一些国家加载到数据库中.我该怎么做?
应用程序的 struct 如下:
Repository > Service > WebMVC
xml在WebMVC
项目中.
我如何处理在应用程序启动前或数据库生成后需要预先存在的数据的情况.例如,我有一个列表,在代码第一次生成数据库后,我想将其中的一些国家加载到数据库中.我该怎么做?
应用程序的 struct 如下:
Repository > Service > WebMVC
xml在WebMVC
项目中.
您可以创建自定义初始值设定项,它继承自DropCreateDatabaseIfModelChanges
或DropCreateDatabaseAlways
接口.喜欢:
public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<-YourDbContext->
然后覆盖种子方法,如下所示:
protected override void Seed(YourDbContext context)
整个示例可能如下所示:
public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<EntitiesContext>
{
protected override void Seed(EntitiesContext context)
{
List<Role> roles = new List<Role>
{
new Role {Id=1, Title="Admin"},
new Role {Id=2, Title="ProjectManager"},
new Role {Id=3, Title="Developer"}
};
// add data into context and save to db
foreach (Role r in roles)
{
context.Roles.Add(r);
}
context.SaveChanges();
}
}
编辑:设置之后,您还必须设置初始化器,就像Ladislav Mrnka提到的那样.
Database.SetInitializer(new EntitiesContextInitializer());
即:在Global.asax中:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
Database.SetInitializer(new EntitiesContextInitializer());
}
别忘了加using System.Data.Entity;