Oracle的Entity Framework兼容提供程序比较?

3
我已经阅读了类似的问题和它们的答案,但是除了一个过时的问题(来自2009年之前的EF4)外,似乎没有处理这个确切问题的问题。
如果有人使用Oracle的EF提供程序有积极或消极的经验,请分享您的体验。
类似的问题:
Entity Framework and Oracle
Can you use Microsoft Entity Framework with Oracle?
Entity framework with oracle database
How to choose an Oracle provider for .Net application?
我知道的提供程序:
Oracle的ODP.NET: http://www.oracle.com/technetwork/topics/dotnet/index-085163.html
Devart的DotConnect: http://www.devart.com/dotconnect/entityframework.html
DataDirect的Progress: http://www.datadirect.com/products/net/release-history.html
OPENLINK: http://uda.openlinksw.com/dotnet/
我知道Oracle的提供程序目前是测试版(3),而且不是完全托管的 - 32位与64位有不同的二进制文件。
其他的提供程序是否稳定?
我错过了哪些?
哪些已经成功地在您的项目中使用了?
2个回答

12

我对不同提供商进行了快速比较,包括:

  1. 安装体验。
  2. 连接性。
  3. 服务器资源管理器体验。
  4. 从数据库升级体验(数据库优先)。
  5. 数据类型映射(数据库优先)。

以下是结论:

1. 安装体验。

Oracle的ODP.NET (beta 3): 分别安装x86和x64版本比较复杂,安装程序不适用于Windows。 填充系统路径(与最大长度相差无几),不安装到标准文件夹(程序文件+应用程序数据)。

Devart的DotConnect: 安装流畅,提供程序DLL完全受控。

DataDirect的Progress: 安装流畅,提供程序DLL完全受控。

OPENLINK: 似乎需要服务器端安装,未进行进一步测试。

2. 连接性。

Oracle的ODP.NET (beta 3): 配置复杂,在客户端机器上要求Oracle安装,还需要在Oracle安装中添加额外的TSN文件或一个类似LISP/Scheme的长且复杂的连接字符串。
更新: 在文档中没有找到此信息,然而连接字符串也可以包含简单的数据源定义,例如 serverName:port/serviceName。

Devart的DotConnect: 简单的连接字符串+向导。

DataDirect的Progress: 简单的连接字符串+向导。

3. 服务器资源管理器体验。

Oracle的ODP.NET (beta 3): 三个中最强大的,能够轻松编辑、查看键和索引。

Devart的DotConnect: 查看表和字段。

DataDirect的Progress: 能够轻松编辑、查看键和索引。

4. 从数据库升级体验(数据库优先)。

Oracle的ODP.NET (beta 3): 直截了当。

Devart的DotConnect: 显示所有模式的表,没有筛选选项——使查找表变得繁琐。

DataDirect的Progress: 直截了当。

5. 数据类型映射(数据库优先)。

Oracle的ODP.NET (beta 3): number(1,0)、number(2,0)和number(3,0)的默认映射是错误的*。 可以手动覆盖number(2,0)和number(3,0)。修复number(1,0)不起作用(至少在beta 3中不起作用——可能在beta 2中起作用)。

更新: 现在发布版本已经出来了(112030),这个问题已经被修复。 一些映射可以通过app.config文件中的部分实现

Devart的DotConnect: 显示所有模式的表,没有筛选选项——使查找表变得繁琐。 binary float、binary double、timestamp with time zone、number(2,0)、number(3,0)和number(4,0)的默认映射是错误的*。手动覆盖应该可以——没有检查。

DataDirect的Progress: 默认映射是正确的*。

(*) 我期望的映射:DB Data Type .NET Data Type integer Decimal int Decimal smallint Decimal long String decimal Decimal rowid String float Decimal double Decimal binary float Single binary double Double char[40] String charvar[40] String natchar[40] String natcharvar[40] String natcharacter[40] String natcharactervar[40] String number Decimal numeric Decimal nvarchar2[40] String real Decimal date DateTime timestamp DateTime timestamplocal DateTime timestampzone DateTimeOffset xml String raw15 Binary raw16 Guid raw17 Int64 number(1,0) Boolean number(2,0) Byte or SByte number(3,0) Byte or SByte (accepted Int16 as OK too) number(4,0) Int16 number(5,0) Int16 (accepted Int32 as OK too) number(6,0) Int32 number(7,0) Int32 number(8,0) Int32 number(9,0) Int32 number(10,0) Int32 (accepted Int64 as OK too) number(11,0) Int64 number(15,0) Int64 number(16,0) Int64 number(17,0) Int64 number(18,0) Int64 number(19,0) Int64 (accepted Decimal as OK too) number(20,0) Decimal (would accept Int64 as OK too) number(21+,0) Decimal

如果您希望数据库类型能够存储.NET类型范围内的任何数字,则IntX需要一个形如(N,0)的数字,其中Ceil(log10(2^X)) = N用于存储**。

Bool (Int1) ==> number(1,0)
Byte (Int8) ==> number(3,0)
Int16, UInt16 ==> number(5,0)
Int32, UInt32 ==> number(10,0)
Int64 ==> number(19,0)
UInt64 ==> number(20,0)

** 这个计算假设为无符号数,对于有符号数则为 ceil(log(2^(X-1))。

数据类型的假设参考资料:
TECH on the Net
Devart
Oracle


2

我还没有尝试过 EF 4.2,但它应该支持最新的数据提供程序,4.1只支持 MS SQL Providers,因为有许多新功能插件。

这里列出了所有的提供者http://blogs.msdn.com/b/adonet/archive/2011/11/01/ef-4-2-released.aspx

EF 4.2只作为 NuGet 包提供,并且应该是稳定的, 我在生产环境中使用的是 4.1 (Asp.Net MVC 和 MS SQL Server)

另外,这里有一些类似于你的问题的先前答案: 支持 Oracle Provider 的 Entity Framework (msdn)

简而言之,如果你正在使用 Entity Framework 4.1,请升级到 4.2,否则可能会出现严重的核心问题。 升级到 4.2 然后再次测试,所有提供者都应该正常工作。

例如,dotConnect for Oracle 支持 Entity Framework v4,所以这在 EF 4.2 中将可以无问题运行。


谢谢提示。我会在测试之前升级。 - Danny Varod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接