EntityFramework 6 with Oracle:是不是有“独立”ODAC(即没有 ODBC),是不是每台客户端 PC 都需要安装它?
Posted
技术标签:
【中文标题】EntityFramework 6 with Oracle:是不是有“独立”ODAC(即没有 ODBC),是不是每台客户端 PC 都需要安装它?【英文标题】:EntityFramework 6 with Oracle: Is there a "standalone" ODAC (i.e. without ODBC), and does every client PC need to have it installed?EntityFramework 6 with Oracle:是否有“独立”ODAC(即没有 ODBC),是否每台客户端 PC 都需要安装它? 【发布时间】:2015-03-11 02:12:51 【问题描述】:当我的 VS 2013 Update 4 安装正在运行时,我决定问一些困扰我的问题,这些问题可能很容易回答,因为我还无法测试自己(因为到目前为止我有一个较旧的 VS 版本) .另外,我对 Oracle DB 没有太多经验,我只需要使用一个现有的数据库,它到目前为止工作得很好,因为几年前其他人已经完成了所有必要的工作来运行它。
我必须将 EntityFramework 6 与这个现有的 Oracle DB 一起使用。我知道我需要一个 ODAC 才能工作,而且据说它必须是最新的 (12.x)。到目前为止,我为测试 EF 是否可以与我的 Oracle DB (11g) 一起使用所做的工作:
从 NuGet 安装 ODAC 11.2.0.3.20 从 NuGet 安装 EF 5在可更新视图出现一些复杂情况后,一切正常。
现在要让 EF 6 与 Oracle 一起运行,我首先需要拥有更新的 ODAC 版本。 是否需要从here 安装包含完整 ODBC 的软件包? PC 上已经有这个的旧版本。是否有可用的 ODAC 的“独立”安装,还是我必须在我的开发 PC 上卸载/重新安装整个软件包?
我也不知道:以后使用该软件的每个客户都需要这个安装,还是可以只提供 DLL 的? 据我所知,客户已经每个在他们的系统上安装了 ODBC,并且每个人都分配了一个特定的 DB 用户,他们通过该用户读取和操作 DB 中的数据,如果知道这一点很重要的话。
提前致谢!
【问题讨论】:
【参考方案1】:您可以使用托管驱动程序 ODP.NET(Oracle Data Provider for .NET),您可以从这里下载它:Oracle Data Access Components (ODAC) Downloads。
它只是一个您必须分发的 DLL (Oracle.ManagedDataAccess.dll)。它适用于 x86 和 x64。
【讨论】:
这是否意味着我应该下载那里链接的小型 XCopy 版本?这个页面说我需要32位ODT才能正确使用EF desinger;那么我可以在我的开发机器上使用完整的 ODTwithODAC 包,并且仍然在部署时发送那个单个 DLL 文件吗?谢谢! 下载磁贴ODP.NET_Managed121020.zip。正如我所写的,将它用于 32 位还是 64 位都没有区别。 zip 还包含一个用于您的 EF 的 DLL (EF6/Oracle.ManagedDataAccess.EntityFramework.dll) 我下载了完整的包 (ODTwithODAC),因为我们现在还需要其他东西。现在我可以成功引用您提到的 DLL,甚至可以将 EF 设计器与它一起使用。那太棒了!我只是想知道:当我们发布应用程序时,我们可以包含 dll;但是客户端PC上的用户还需要其他什么吗?比如,用户是否需要更新他的 ODBC 安装,或者当我发送 dll 时一切都“正常工作”?不幸的是,我还不能真正测试它。【参考方案2】:很长一段时间以来,我一直在使用 unmanaged ODP.NET,即便如此,它也可以在完全独立的模式下使用(尽管您必须在应用程序中拖动巨大的 DLL)。这种方法描述了here,以防万一。
现在有了托管 ODP.NET,事情变得容易多了。我只会补充(对 Wernfried 的回答),如果您使用 NuGet,您可以从here 安装托管版本。但请记住,此包不支持分布式事务。
【讨论】:
那么这是我唯一需要添加到项目中的东西吗?当我搜索“ODP”时,NuGet 向我显示的内容让我有点不知所措。我想我也可以使用 ODP.EntityFramework 的东西。正如oracle主页指出的那样,我是否还需要在本地安装32位ODAC才能使用设计器?谢谢! 是的,我相信您唯一需要做的就是从 NuGet 加载该依赖项。尝试搜索“odp.net.managed”。您需要名为“Oracle Data Provider for .NET (ODP.NET) Managed Driver”的包。至于 EntityFramework,我认为您还需要从 Nuget 安装“odp.net.entityframework”依赖项。但是,老实说,我以前从未使用过 EntityFramework + Oracle 组合。但如果我需要使用它,我会朝那个方向发展:从 NuGet 加载所有需要的依赖项。它极大地简化了依赖项的部署和管理。希望它对你有用!以上是关于EntityFramework 6 with Oracle:是不是有“独立”ODAC(即没有 ODBC),是不是每台客户端 PC 都需要安装它?的主要内容,如果未能解决你的问题,请参考以下文章
slf4j-api 1.6.x (or later) is incompatible with this binding.
是否无法在运行或编译时更改 SSDL 内容(Visual Studio 2015 EntityFramework Database First With Oracle)
错误:无法解决依赖关系。 “entityframework 6.4.4”与“EntityFramework 6.2.0”约束EntityFramework(= 6.2.0)不兼容
dataPump Import Fails With Errors ORA-39083 ORA-1858 or ORA-39083 ORA-1843 (Doc ID 470758.1)
“with_std=False or True”和“with_mean=False or True”之间的 StandardScaler 区别
解决适用EntityFramework生成时报错“无法解析依赖项。"EntityFramework 6.4.4" 与 ' EntityFramework.zh-Hans 6