【问题标题】:How to disable migration on Db schema mismatch in code-first approach?如何在代码优先方法中禁用 Db 模式不匹配的迁移?
【发布时间】:2015-07-22 02:42:00
【问题描述】:

在我的团队中,我们 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”的模型 数据库创建后上下文发生了变化。考虑使用 Code First 迁移以更新数据库 (http://go.microsoft.com/fwlink/?LinkId=238269)。

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

请问有什么方法可以实现吗?

【问题讨论】:

标签: .net entity-framework entity-framework-6


【解决方案1】:

你可以使用 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/

【讨论】:

    猜你喜欢
    • 2013-01-17
    • 2013-11-14
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多