我已经阅读了类似的问题和他们的答案,然而,似乎没有涉及这个确切的问题,除了一个已经过时的(从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的进度:http://www.datadirect.com/products/net/release-history.html
OPENLINK:http://uda.openlinksw.com/dotnet/
我知道Oracle的提供商目前是测试版(3)并且没有完全管理 - 32位与64位的单独二进制文件。
其他人是否稳定?
有没有我错过的?
哪些已成功用于您的项目?
答案 0 :(得分: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的冗长复杂的连接字符串。 更新:在文档中找不到这个,但是,连接字符串也可以包含简单的数据源定义,例如服务器名:端口/服务名
Devart的DotConnect: 简单的连接字符串+向导。
DataDirect的进展: 简单的连接字符串+向导。
3。服务器资源管理器体验。
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),这已得到修复。 可以通过section in app.config file进行一些映射。
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
如果您希望数据库类型能够存储.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
答案 1 :(得分:2)
我没有尝试过应该支持最新数据提供程序的EF 4.2,4.1因为数字新功能插件而只支持MS SQL提供程序。
以下是providers listed 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)
此外,以下是一些与您的问题类似的先前答案: Support Oracle Provider for Entity Framework (msdn)
简而言之,如果您使用的是Entity Framework 4.1,则应该进行更新,您可能会遇到严重的核心问题。 升级到4.2,然后再次测试,一切都应该与提供商正常工作。
例如,dotConnect for Oracle支持实体框架v4,因此在EF 4.2中可以正常运行