Oracle的实体框架兼容提供程序的比较?

Dan*_*rod 3 oracle comparison entity-framework dataprovider entity-framework-4

我已经阅读了类似的问题和他们的答案,然而,似乎没有涉及这个确切的问题,除了一个,这是过时的(从2009年 - EF4之前).

有没有人对使用Oracle的EF提供商有任何积极或消极的体验,如果是这样,您的体验是什么?

类似问题:
实体框架和Oracle
您是否可以将Microsoft Entity Framework与Oracle一起使用?
使用oracle数据库的实体框架
如何为.Net应用程序选择Oracle提供程序?

:我知道的供应商
Oracle的ODP.NET:http://www.oracle.com/technetwork/topics/dotnet/index-085163.html
Devart的DotConnect:http://www.devart.com/dotconnect/entityframework.html
的DataDirect的进展:http:
//www.datadirect.com/products/net/release-history.html OPENLINK:http://uda.openlinksw.com/dotnet/

我知道Oracle的提供商目前是beta(3)并且没有完全管理 - 32位与64位的单独二进制文件.

其他任何一个稳定吗?
有没有我错过的?
哪些已在您的项目中成功使用?

Dan*_*rod 12

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

  1. 安装经验.
  2. 连接.
  3. Server Explorer体验.
  4. 从数据库体验更新(数据库优先).
  5. 数据类型映射(数据库优先).

以下是结论:

1.安装经验.

Oracle的ODP.NET(beta 3):单独的x86和x64版本的复杂安装,不是为Windows设计的安装程序.填充系统路径(危险地接近最大长度),不安装到标准文件夹(程序文件+ appdata).

Devart的DotConnect:顺利安装,提供程序DLL完全托管.

DataDirect的进度:顺利安装,提供程序DLL完全托管.

OPENLINK:似乎要求服务器端安装,没有进一步测试.

2.连通性.

Oracle的ODP.NET(beta 3):要配置复杂,需要在客户端计算机上安装Oracle,并在Oracle安装中使用其他TSN文件,或者需要看起来像LISP/Scheme的长而复杂的连接字符串.
更新:在文档中找不到这个,但是,连接字符串也可以包含简单的数据源定义,例如serverName:port/serviceName.

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

DataDirect的进度:简单的连接字符串+向导.

3. Server Explorer体验.

Oracle的ODP.NET(beta 3):三者中最强大的,可以轻松编辑,查看键和索引.

Devart的DotConnect:查看表格和字段.

DataDirect的进度:可以轻松编辑,查看键和索引.

4.从数据库体验更新(数据库优先).

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

Devart的DotConnect:显示所有模式中的表,没有过滤选项 - 使查找表耗费精力.

DataDirect的进展:直截了当.

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

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

更新: 现在发布版本已经发布(112030),这已得到修复.可以通过app.config文件中的部分进行一些映射.

Devart的DotConnect:显示所有模式中的表,没有过滤选项 - 使查找表耗费精力.二进制浮点数,二进制双精度数,带时区的时间戳,数字(2,0),数字(3,0)和数字(4,0)的默认映射是错误的*.手动覆盖应该工作 - 没有检查.

DataDirect的进度:默认映射是OK*.

(*)我预期的映射:

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
Run Code Online (Sandbox Code Playgroud)

如果您希望数据库类型能够存储.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)
Run Code Online (Sandbox Code Playgroud)

**计算假设无符号数,对于有符号数字ceil(log(2 ^(X-1)).

数据类型假设的参考:
Net
Devart Oracle 上的TECH