Sha*_*ean 45 database entity-framework initialization ef-code-first entity-framework-4.1
如何在应用程序启动之前或生成数据库之后处理我需要预先存在的数据的情况.例如,我有一个国家列表,我希望在代码优先生成数据库后将其加载到数据库中.我该怎么做呢?
应用程序的结构如下:
Repository > Service > WebMVC
xml在WebMVC
项目中.
Dam*_*amb 67
您创建自定义初始化程序,它继承自DropCreateDatabaseIfModelChanges
或DropCreateDatabaseAlways
接口.喜欢:
public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<-YourDbContext->
Run Code Online (Sandbox Code Playgroud)
然后你覆盖种子方法,如:
protected override void Seed(YourDbContext context)
Run Code Online (Sandbox Code Playgroud)
整个示例可能如下所示:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:设置完成后,你必须设置初始化程序,正如Ladislav Mrnka所说.
Database.SetInitializer(new EntitiesContextInitializer());
Run Code Online (Sandbox Code Playgroud)
即:在Global.asax中:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
Database.SetInitializer(new EntitiesContextInitializer());
}
Run Code Online (Sandbox Code Playgroud)
别忘了加using System.Data.Entity;
.....
归档时间: |
|
查看次数: |
31773 次 |
最近记录: |