• 解决Code First因_migrationHistory表与代码不一致的问题


      我们在测试环境多人开发时,由于会存在多个测试、开发环境,但是大家共用一个数据库。

      这时候会碰到一个问题,一旦有某个人通过Migration更新了数据库,其他环境在首次查询数据库的时候都会收到Dbcontext与代码不一致的错误,提示需要做Migration的错误。但是其他人的代码很可能都没有签入到服务器,所以根本无法获得Migration的记录。遇到这种情况需要关闭Codefirst对数据库的检测代码中增加:

    Database.SetInitializer<testContext>(null);

      更多内容:

    Code first数据库初始化的4种策略,其中第四种就不会检查_migrationHistory的记录

    策略一:数据库不存在时重新创建数据库

    Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testContext>());

    策略二:每次启动应用程序时创建数据库

    Database.SetInitializer<testContext>(new DropCreateDatabaseAlways<testContext>());

    策略三:模型更改时重新创建数据库

    Database.SetInitializer<testContext>(new DropCreateDatabaseIfModelChanges<testContext>());

    策略四:从不创建数据库

    Database.SetInitializer<testContext>(null);

    Entity Framework数据库初始化示例

    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    using Web.Models.Mapping;
    
    namespace Web.Models
    {
        public class testContext : DbContext
        {
            static testContext()
            {
                Database.SetInitializer<testContext>(null);
            }
    
            public testContext()
                : base("Name=testContext")
            {
            }
    
            public DbSet<Person> People { get; set; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Configurations.Add(new PersonMap());
            }
        }
    }

    Entity Framework中DbContext首次加载OnModelCreating会检查__MigrationHistory表,作为使用Code Frist编程模式,而实际先有数据库时,这种检测就是多余的了,所以需要屏蔽,在EF 4.1之前可以使用在OnModelCreating函数总加入下面语句来屏蔽这种检测:

    modelBuilder.Conventions.Remove<IncludeMetadataConvention>();

    而到4.3之后需要使用,上列语句以被MSDN明确表示过时,所以需要新的方式取代:

    Database.SetInitializer<DBContext>(null);
  • 相关阅读:
    Django DTL模板语法中的过滤器
    Django DTL模板语法中的url反转
    Django DTL模板语法中定义变量
    Django DTL模板语法中的循环的笔记
    UOJ #310 黎明前的巧克力 FWT dp
    6.15 省选模拟赛 老魔杖 博弈论 SG函数
    luogu P4887 模板 莫队二次离线 莫队 离线
    一本通 高手训练 1788 爬山 dp 斜率 凸包
    luogu P5289 [十二省联考2019]皮配 背包
    6.10 省选模拟赛 小C的利是 高斯消元 矩阵行列式
  • 原文地址:https://www.cnblogs.com/ceci/p/9215123.html
Copyright © 2020-2023  润新知