【问题标题】:How can I disable model compatibility checking in Entity Framework 4.3?如何在 Entity Framework 4.3 中禁用模型兼容性检查?
【发布时间】:2012-05-24 07:03:54
【问题描述】:

我正在使用 EF 4.3,并且有一个上下文需要与另一个库使用 EF Code First 4.3 生成的数据库进行通信。上下文抛出异常说明

支持“上下文”上下文的模型自 数据库已创建。考虑使用 Code First 迁移来更新 数据库

在 EF 4.1 中,这可以通过从模型构建器中删除 IncludeMetadataConvention 来禁用。但是,在 4.3 中,此约定已被弃用,不再有效。

如何让 EF 4.3 上下文与 EF 4.3 生成的数据库由不同的上下文构建?我发现的唯一选择(远非理想)是删除元数据表,从而导致 both 上下文假定数据库不是由 EF 构建的。

PS:我知道这种情况可能会引发关于为什么我需要这样做的问题;我知道这远非理想,但请放心,这是我需要解决的问题,并且横向处理的选择有限。

【问题讨论】:

    标签: c# .net entity-framework entity-framework-4.3


    【解决方案1】:

    将初始化程序设置为null 将跳过模型兼容性检查。

    Database.SetInitializer<MyContext>(null);
    

    【讨论】:

    • 你把这个放在哪里?
    • 上下文中的静态构造函数似乎对大多数应用程序都非常有效。
    • @deepakgates 我的 Context 构造函数中有它。
    • 如果此行显示错误,请添加using System.Data.Entity
    • 如果您发现这没有按预期工作,请检查配置文件的 EF 部分。确保您的上下文具有 disableDatabaseInitialization="true"。我为此浪费了太多时间,没有人在他们的回答中提到它。关于这个设置的更多信息可以在msdn.microsoft.com/en-us/data/jj556606底部找到
    【解决方案2】:

    对于 EF 4.3 或更高版本

    Database.SetInitializer<MLTServerWatcherContext>(null);
    

    或者如果使用旧版本的 EF

    modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
    

    (我知道他说他使用的是 EF 4.3,但我认为显示这个选项也很好)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多