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);
  • 相关阅读:
    使用PHP建立GIF
    无数据库的详细域名查询程序PHP版
    用PHP实现通过Web执行C/C 程序
    判断一数是否在一已知数组中的函数
    如何将本地项目上传到码云
    IIS服务器,IIS日志文件占用C盘空间,C盘空间不足 常见问题
    谈谈个人能力的系统性
    毕业后5年决定命运
    个人取得工资、薪金所得应当如何缴纳个人所得税
    Chart 控件 for vs2008的安装
  • 原文地址:https://www.cnblogs.com/ceci/p/9215123.html
Copyright © 2011-2022 走看看