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

时间:2015-07-21 18:06:49

标签: .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>();
    }
}

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

  

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

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

有没有想要达到这个目的?

1 个答案:

答案 0 :(得分:7)

您可以使用null初始值设定项:

Database.SetInitializer(new NullDatabaseInitializer<ApplicationDbContext>());

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

if (!context.Database.CompatibleWithModel(true))
{
    // handle out of sync
}

以下是自定义初始值设定项的演练: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/