欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

EF CodeFirst 数据库初始化策略

程序员文章站 2022-06-30 21:43:19
最近用EF做了几个小东西,了解简单使用后有了深入研究的兴趣,所以想系统的研究一下EF CodeFist的几个要点。下面简单列一下目录 1.1 目录 1. 数据库初始化策略和数据迁移Migration的简单介绍 3. 配置一对一关系 4. 配置一对多关系 5. 配置多对多关系 6. 开发环境配置Mig ......

最近用EF做了几个小东西,了解简单使用后有了深入研究的兴趣,所以想系统的研究一下EF CodeFist的几个要点。下面简单列一下目录

1.1 目录

  1. 数据库初始化策略和数据迁移Migration的简单介绍
  2. 配置一对一关系
  3. 配置一对多关系
  4. 配置多对多关系
  5. 开发环境配置Migration最佳实践和生产环境配置Migration最佳实践

2.1 数据库初始化策略

在**http://www.entityframeworktutorial.net**这个网站中,我找到相关数据库初始化的策略

2.1.1有四种不同的数据库初始化策略:

  1. CreateDatabaseIfNotExists:这是默认的初始化程序。顾名思义,如果每个配置都不存在,它将创建数据库。但是,如果更改模型类,然后使用此初始化器运行应用程序,则会引发异常。
  2. DropCreateDatabaseIfModelChanges:如果您的模型类(实体类)已更改,则此初始化程序将删除现有数据库并创建新数据库。所以,当模型类更改时,您不必担心维护数据库模式。
  3. DropCreateDatabaseAlways:顾名思义,这个初始化器每次运行应用程序时都会丢弃一个现有的数据库,而不管你的模型类是否已经改变。当您每次运行应用程序时都需要新的数据库时,例如在开发应用程序时,这会很有用。
  4. 自定义数据库初始化程序:如果上述内容不满足您的要求,或者您想要使用上述初始化程序初始化数据库,您也可以创建自己的自定义初始化程序。

还有一种在列表中没有体现,就是MigrateDatabaseToLatestVersion ,在配置自动化迁移(Automated Migration)中会使用。

如果要取消数据库初始化策略,代码为:

Database.SetInitializer

2.1.2定义数据库初始化程序的示例代码如下所示:

public class SchoolDBInitializer :  CreateDatabaseIfNotExists<SchoolDBContext>
{
    protected override void Seed(SchoolDBContext context)
    {
        base.Seed(context);
    }
}

注意其实是有继承关系的。
按照官方的说法:This separates the database initialization code from a context class.--这将数据库初始化的代码从context中分离出来

2.1.3 在配置文件中设置数据库初始化策略

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>    
    <add key="DatabaseInitializerForType SchoolDataLayer.SchoolDBContext, SchoolDataLayer"
            value="SchoolDataLayer.SchoolDBInitializer, SchoolDataLayer" />
    </appSettings>
</configuration>

key的结构为 DatabaseInitializerForType{namespace}.{className},value 同理。
如果要配置取消数据库初始化策略,value=“Disabled” 即可。