【问题标题】:Entity Framework 6.1.1 disable model compatibility checkingEntity Framework 6.1.1 禁用模型兼容性检查
【发布时间】:2017-10-12 17:38:18
【问题描述】:

我在将 EF 更新到 6.1.1 版本后遇到以下错误:

EntityFramework.dll 中出现“System.InvalidOperationException”类型的未处理异常

附加信息:支持TvstContext 上下文的模型自数据库创建以来已更改。考虑使用 Code First 迁移来更新数据库 (http://go.microsoft.com/fwlink/?LinkId=238269)。

我们可以在过去解决这个问题,如这个问题中所述: Where is modelBuilder.IncludeMetadataInDatabase in EF CTP5?

但是,我似乎无法摆脱错误。

【问题讨论】:

  • 您是否启用了 AutomaticMigrations?还是您正在使用手动迁移?如果是后者,您是否尝试创建新的迁移?

标签: c# entity-framework console-application


【解决方案1】:

这应该可以,把它放在派生 DbContext 的构造函数中:

Database.SetInitializer<MyContext>(null);

【讨论】:

  • 谢谢。我发现 EF 在某些情况下会损坏模型更改跟踪(例如,在重构期间进行大量模型和迁移更改以获得最佳解决方案),修复它的唯一方法是手动回滚更改并从 migrationhistory 表中删除卡住的迁移。这种 EF 模型更改跟踪有时真的很烦人。 Laravel 有迁移,但没有模型跟踪,它工作得很好。我想,这就是模型跟踪的代价——当你想对抗 EF 自动跟踪时会增加复杂性和问题,所以有时最好完全关闭它。
  • 谢谢。我不需要模型更改跟踪来满足我的要求。它只是解决问题。
  • 经过太多小时无法正常工作后,我发现我还必须更新 web.config 中的 EF 配置部分。我从上下文节点中删除了所有设置,并在其中包含了 disableDatabaseInitialization="true" 。那是一切开始正常工作的时候。有关该设置的更多信息位于msdn.microsoft.com/en-us/data/jj556606 的底部
  • 这在构造函数中不起作用。我只是把它放在我的代码中的其他地方
  • 如果我决定将自己的迁移编写为 SQL 原始命令但仍使用 EF 迁移管理工具忽略模型一致性问题,这是否仍适用于 add-migration 和 update-database 命令?
【解决方案2】:

也可以在Web.config文件中设置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>    
    <add key="DatabaseInitializerForType YourNamespace.YourDbContext, AssemblyName"
            value="Disabled" />
    </appSettings>
</configuration>

决定来自: http://www.entityframeworktutorial.net/code-first/turn-off-database-initialization-in-code-first.aspx

【讨论】:

  • 这可行并且可以说是首选,因为不需要更改代码并且可以根据环境等打开/关闭兼容性检查。
【解决方案3】:

扩展 Dabblernl 的答案:

public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
        Database.SetInitializer<ApplicationDbContext>(null);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2014-10-07
    • 2018-07-29
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 2020-01-21
    相关资源
    最近更新 更多