如何停止EF(代码优先)检查架构更改

时间:2012-03-15 08:58:17

标签: sql database entity-framework code-first

我有一个导致脱发的问题...

我使用Code First(EF)进行项目构建;一切都很好,它就像一个魅力,然而,我找不到一个合适的方式允许数据库更改(通过.sql脚本),而没有应用程序在启动时发脾气,因为架构已经改变。

我已阅读并阅读此问题,我已删除EdmMetaData表,因此无法比较数据库的哈希值,但随后读取了EF中的一个错误,如果删除它,它仍然认为架构有已更改(因为它无法识别丢失的表,因此它会比较一个空字符串!)。

另外,我尝试在Global.asax文件中使用Database.SetInitializer(null),但这意味着我以后无法访问数据模型。

如果架构发生变化等,每个人都会讨论使用删除数据库的选项。

这就是我要找的:

对于EF / Code First来做......没事!甜蜜的FA!没出息!

...如果我通过外部应用程序更改架构,我希望它完全忽略这些更改,并且只是假设我已经通过.sql脚本对相关的模型更改进行了这些数据库更改。如果我错过了一个专栏或一张桌子,那么我接受了我的愚蠢,我希望发脾气,但是,直到我犯了一个错误,我希望EF相信我。

这意味着我可以随时使用.sql脚本轻松更新任何客户端,而不用担心EF会出现问题! :(

任何想法的人??

2 个答案:

答案 0 :(得分:7)

使用最新的Entity Framework版本,您不再需要执行Ladislav Mrnka所说的内容。从EF 4.3开始,您只需要将WebContext的初始化程序设置为null。例如:

Database.SetInitializer<FabrikamFiberWebContext>(null);

答案 1 :(得分:5)

除了将初始化程序设置为null之外,还要将其添加到上下文类中:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    model.Conventions.Remove<IncludeMetadataConvention>();
}

它将关闭哈希比较。