如何解决数据库中实体框架代码优先的默认数据
| 如何处理启动应用程序之前或数据库生成后需要预先存在的数据的情况。例如,我有一个要在代码优先生成数据库后将其加载到数据库中的国家/地区的列表。我该怎么做呢? 应用程序的结构如下:Repository > Service > WebMVC
xml位于WebMVC
项目中。
解决方法
您创建自定义初始化程序,该初始化程序继承自
DropCreateDatabaseIfModelChanges
或DropCreateDatabaseAlways
接口。喜欢:
public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<-YourDbContext->
然后覆盖如下的Seed方法:
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;
.....
,您必须创建自DropCreateDatabaseIfModelChanges
派生的自定义数据库初始化程序,并使用覆盖的Seed
方法填充数据。然后,当应用程序启动时,您必须使用ѭ12来设置新的初始化程序。以下是示例(来自CTP5),用于在数据库中创建自定义索引。
,有关示例,请参见新的MVC / Entity Framework教程系列,网址为:
http://www.asp.net/entity-framework/tutorials#Using%20MVC
#1和#4都显示初始化程序类。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。