如何在代码优先方法中禁用Db模式不匹配的迁移?

Mah*_*eep 1 .net entity-framework entity-framework-6

在我的团队中,我们C#开发人员没有直接对数据库进行架构修改访问.有一个单独的团队为我们添加/更改表.当需要更改数据库模式的新需求时,他们会添加列/表并向我们提供详细信息,以便我们更新模型类.

以下是DataContext

public class FamilyDataContext : DbContext
{
    public FamilyDataContext() : base("FamilyDataContext")
    {
    }

    public DbSet<ResidentInformation> ResidentInformation { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题:尝试在此表中保存数据时出错.

自创建数据库以来,支持'FamilyDataContext'上下文的模型已更改.请考虑使用"代码优先迁移"来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269).

我想要的是,如果C#代码和Db模式中的模型定义不匹配,则给出错误,以便可以通过dev或DBA手动修复它; 而不是尝试自动升级数据库.我不想要任何自动迁移.

无论如何要实现这一目标吗?

Ste*_*ene 7

您可以使用null初始化程序:

Database.SetInitializer(new NullDatabaseInitializer<ApplicationDbContext>());
Run Code Online (Sandbox Code Playgroud)

但这不会告诉你你的模型不同步.要做到这一点,你需要制作一个自定义初始化程序,然后进行检查

if (!context.Database.CompatibleWithModel(true))
{
    // handle out of sync
}
Run Code Online (Sandbox Code Playgroud)

以下是自定义初始化程序的演练:http://www.codeguru.com/csharp/article.php/c19999/Understanding-Database-Initializers-in-Entity-Framework-Code-First.htm

或者更简洁的例子:https://coding.abel.nu/2012/03/prevent-ef-migrations-from-creating-or-changing-the-database/