【问题标题】:Using 2 different versions of EF in the same Project在同一个项目中使用 2 个不同版本的 EF
【发布时间】:2015-01-13 15:11:47
【问题描述】:

在我当前的项目中,我有两个项目引用,它们是 DataContexts。一种是用于访问 Oracle Db,并且使用的是 EF 4.2。另一个是访问 SQL Server 并使用 EF 6.0。

我已经阅读了this 解决方案,但我无法让它工作。

这是我得到的:

  • 我引用了 EF 6.0。
  • 在预构建命令中,我将两个 dll 复制到单独的文件夹中

在我的 Appconfig 中我添加了这个:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" />
        <codeBase version="6.0.0.0" href="ef6.0\EntityFramework.dll" />
        <codeBase version="4.2.0.0" href="ef4.2\EntityFramework.dll" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

我仍然得到:“System.Data.Objects.ObjectContext”类型是在未引用的程序集中定义的。您必须添加对程序集“System.Data.Entity,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”的引用。

有什么提示吗?

【问题讨论】:

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


【解决方案1】:

与引用的问题/答案的区别在于,在另一种情况下,有两个 DLL 使用不同版本的依赖项。在您的情况下,您试图在同一个项目中使用两个不同版本的依赖项。

您可以尝试将特定于版本的代码分解(包装)到两个 DLL(例如 OracleDataAccess 和 SqlDataAccess)中。在每个项目中,您现在都可以引用特定版本的 EF。然后从您的主项目中引用两个 ...DataAccess 项目,如果一切顺利,dependentAssembly 配置文件条目应该解决两个 EF DLL 在运行时的版本冲突。

注意:您可能还需要调整如何将 EF 依赖项复制到构建目录以匹配配置文件中的 href。

【讨论】:

  • 我想我有类似你所说的,但它不起作用。我在不同的类库项目 EF4 和 EF6 中有两个数据上下文。上面的一个 BIZ 层,两个类库项目引用它对应的 DAl 层项目。最重要的是,一个单一的网络表单应用程序,它注册了 EF4 依赖项。当调用 BIZ 方法时,它是 throwinf 运行时异常,要求 EF6 程序集。
  • 这样不行。如果您有带有 EF5 的项目 A 和带有 EF6 的项目 B,并且当您从项目 C 中引用其中任何一个项目时,它将失败,因为它找不到 EF .dll。
猜你喜欢
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多