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

标签 oracle entity-framework entity-framework-4 comparison dataprovider

我读过类似的问题和他们的答案,但是,除了一个已经过时的问题(从 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
开放链接:http://uda.openlinksw.com/dotnet/

我知道 Oracle 的提供程序目前是 beta (3) 并且没有完全托管 - 32 位和 64 位的单独二进制文件。

其他的稳定吗?
有没有我错过的?
哪些已成功用于您的项目?

最佳答案

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

  • 安装经验。
  • 连通性。
  • 服务器资源管理器体验。
  • 从数据库经验更新(数据库优先)。
  • 数据类型映射(数据库优先)。


  • 以下是结论:

    1.安装经验。

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

    Devart 的 DotConnect:
    顺利安装,提供者 DLL 完全托管。

    DataDirect 的进展:
    顺利安装,提供者 DLL 完全托管。

    打开链接:
    好像需要服务器端安装,没有进一步测试。

    2. 连通性。

    Oracle 的 ODP.NET(测试版 3):
    配置复杂,需要在客户端机器上安装 Oracle 以及 Oracle 安装中的附加 TSN 文件或看起来像 LISP/Scheme 的长而复杂的连接字符串。
    更新:在文档中找不到这个,但是,连接字符串也可以包含简单的数据源定义,例如服务器名称:端口/服务名称。

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

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

    3. 服务器浏览器体验。

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

    Devart 的 DotConnect:
    查看表和字段。

    DataDirect 的进展:
    可以轻松编辑、查看键和索引。

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

    Oracle 的 ODP.NET(测试版 3):
    直截了当。

    Devart 的 DotConnect:
    显示来自所有模式的表,没有过滤选项 - 使查找表很费力。

    DataDirect 的进展:
    直截了当。

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

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

    更新:现在发布版本已经发布 (112030),这已得到修复。
    一些映射可以通过 section in app.config file 实现.

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

    DataDirect 的进展:
    默认映射正常*。

    (*) 我期望的映射:
    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

    关于oracle - Oracle 的 Entity Framework 兼容提供程序的比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8029000/

    相关文章:

    c# - 同步更新调用期间乐观并发异常

    linq - 使用 .NET Framework 4 的动态 LINQ API

    .net - 如何在使用EF4首先使用模型创建的表中添加表前缀?

    Oracle获取存储过程的上次修改日期

    c# - 使用 datetimeoffset 时 Linq to Entity Framework 错误

    sql - 触发器 Oracle 中插入行的值

    c# - 将 DbContext 与数据库中的更改同步

    entity-framework-4 - ASP.NET MVC 3 如何在创建 View 上为具有 ICollection 属性的模型提供多字段创建功能

    sql - 将多行插入表中,只更改一个值

    xml - 在 Oracle 查询中连接 XMLType 节点