database - Entity Framework 代码优先数据库中的默认数据

标签 database entity-framework initialization ef-code-first entity-framework-4.1

如何处理在应用程序启动之前或数据库生成之后需要预先存在的数据的情况。例如,我有一个国家列表,我想在代码优先生成后将其加载到数据库中。我该怎么做?

应用程序结构如下:

存储库 > 服务 > WebMVC

xml 在 WebMVC 项目中。

最佳答案

您创建自定义初始化程序,它继承自 DropCreateDatabaseIfModelChangesDropCreateDatabaseAlways 接口(interface)。喜欢:

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 所提到的,设置完之后,您还必须设置 Initializer。

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; .....

关于database - Entity Framework 代码优先数据库中的默认数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5655841/

相关文章:

c# - 如何返回邮政编码列表 ## 英里半径内的所有实例

asp.net - EF6(代码优先)、MVC、Unity 和没有存储库的服务层

c# - 类似搜索时出错

arrays - 初始化多维数组

java - 如何从jsp页面将日期插入mysql数据库?

mysql - 数据库级别的 silverstripe 起始页

php - 如何在返回之前向数据库查询添加属性?

c# - 创建的谓词在 Linq to Entity Framework Where 子句中不起作用

c# - 以 LINQ 方式初始化交错数组

c++ - 表达式列表在初始化程序中被视为复合表达式