EF CodeFirst 数据库初始化策略

最近用EF作了几个小东西,了解简单使用后有了深刻研究的兴趣,因此想系统的研究一下EF CodeFist的几个要点。下面简单列一下目录数据库

1.1 目录

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

2.1 数据库初始化策略

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

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

  1. CreateDatabaseIfNotExists:这是默认的初始化程序。顾名思义,若是每一个配置都不存在,它将建立数据库。可是,若是更改模型类,而后使用此初始化器运行应用程序,则会引起异常。
  2. DropCreateDatabaseIfModelChanges:若是您的模型类(实体类)已更改,则此初始化程序将删除现有数据库并建立新数据库。因此,当模型类更改时,您没必要担忧维护数据库模式。
  3. DropCreateDatabaseAlways:顾名思义,这个初始化器每次运行应用程序时都会丢弃一个现有的数据库,而无论你的模型类是否已经改变。当您每次运行应用程序时都须要新的数据库时,例如在开发应用程序时,这会颇有用。
  4. 自定义数据库初始化程序:若是上述内容不知足您的要求,或者您想要使用上述初始化程序初始化数据库,您也能够建立本身的自定义初始化程序。

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

若是要取消数据库初始化策略,代码为:网站

Database.SetInitializer<YourDbContext>(null);spa

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中分离出来.net

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” 便可。code

相关文章
相关标签/搜索