在我的团队中,我们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手动修复它;而不是尝试自动升级数据库。我不想要任何自动迁移。
有没有想要达到这个目的?
答案 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/