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

应用程序的 struct 如下:

Repository > Service > WebMVC

xml在WebMVC项目中.

推荐答案

您可以创建自定义初始值设定项,它继承自DropCreateDatabaseIfModelChangesDropCreateDatabaseAlways接口.喜欢:

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;

Database相关问答推荐

如何避免在模式更改时重新同步微服务数据库之间的整个表?

华为Appcube中的对象字段类型

嵌套事务的目的

sql-dump 有什么用?

仅对表中的一列授予更改

多列上的全文索引如何工作?

如何使用 SELECT WHERE IN() 保持订单?

Followers/following 关注者表数据库 struct

主必须包括表的分区位置错误中的所有列?

如何最好地在 MS SQL Server 中复制整个数据库?

MS SQL 中查询的优先级

单向和双向关系关系的区别

ER图中的一对多关系

xtradb vs innodb

SQL Server 2008 中的 Open Table go 了哪里?

如何在磁盘上布局 B-Tree 数据?

如何在android中使用合同类?

如何以 SYS 身份在 Java 中连接到 Oracle?

使用 PHP/MySQL 导入 CSV 数据

Cassandra - 事务支持