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.安装经验.
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