zoukankan      html  css  js  c++  java
  • EF CodeFirst 数据库初始化策略

    最近用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(null);

    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” 即可。

  • 相关阅读:
    2D ARPG开发之旅(1) 贴图(tilebased)地图的实现(上)贴图修改版
    Microsoft CRM 2011 出现“无法更改域登录名" 错误
    Microsoft CRM 2011 隐藏文件菜单中的”新建活动“菜单
    Microsoft CRM 2011 安装时出现“Could not find GUID for server, Global Catalog not found in forest xxx”的问题
    C#(面向对象)
    delegate(委托)
    ww
    SQL(存储过程,触发器,回滚)
    sss
    EXcel
  • 原文地址:https://www.cnblogs.com/codersun/p/8624941.html
Copyright © 2011-2022 走看看