在同一个项目中使用2个不同版本的EF

时间:2015-01-13 15:11:47

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

在我目前的项目中,我有两个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'的引用。

任何提示?

1 个答案:

答案 0 :(得分:0)

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

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

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