zoukankan      html  css  js  c++  java
  • 解决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);
  • 相关阅读:
    爱情七十八课,闲了就“犯贱”
    阿里巴巴中文站的CSS设计规则(转)
    爱情八十一课,可预测的分手
    [性格][管理]《九型人格2》 唐·理查德·里索(美)、拉斯·赫德森(美)
    爱情八十二课,爱情三国杀
    爱情七十九课,不爱权力大
    [心理学]《爱情心灵安全岛》 四四
    一些你不知道的囧知识,保证让你崩溃
    爱情七十四课,我们的意义
    爱情七十六课,门当户对
  • 原文地址:https://www.cnblogs.com/ceci/p/9215123.html
Copyright © 2011-2022 走看看