【问题标题】:Cross Database Entity Framework Support跨数据库实体框架支持
【发布时间】:2012-03-05 07:37:50
【问题描述】:

我希望在我的应用程序中使用实体框架作为数据库层,但我发现它不支持 oracle 数据库,为此我需要使用第三方提供商。

但是我想构建支持多个数据库(Oracle,MS Sql Server)的数据库层,同时支持像 LinqToSql 和 devart 这样的实体模型。

如果有人有任何信息可以帮助我,我将不胜感激。 谢谢。

【问题讨论】:

    标签: database entity-framework linq-to-sql devart


    【解决方案1】:

    您在这里想要的可能是存储库模式,它可以位于中间,这样您的应用程序就不会关心底层数据是如何存储的。

    您可以使用类似于我的存储库模式(在此处阅读:http://blog.staticvoid.co.nz/2011/10/staticvoid-repository-pattern-nuget.html)并为 oracle 实现自定义 IRepositoryDataSource(您可以通过使用来自 codeplex 的 LINQ to oracle 提供程序,http://linqtooracle.codeplex.com/)或者您可以编写自己的存储库,同时实现 sql 和 oracle。

    【讨论】:

    • 实体框架已经从数据库中抽象出来了。您不会希望在此之上实现另一个存储库。
    • Entity Framewok 没有完全从数据库中抽象出来。虽然看起来。如果您在使用 EF 生成的实体的任何位置放置断点,您将看到编译器生成的代理类与您的实体类的类型不同。这对这些类的反射和二进制序列化有影响,尽管 xml 序列化似乎没问题。这些代理包含用于跟踪更改的数据和行为。真正的抽象需要存储库模式或某种映射到 POCO dto
    【解决方案2】:

    我发现linqconnect component from (devart) 可以满足我的需要。

    【讨论】:

      【解决方案3】:

      Entity Framework 不包括除 SQL Server 之外的任何 RDBMS 的现成提供程序。任何希望支持 EF 的第三方 RDBMS 供应商都应根据 Microsoft 的提供程序模型提供自己的实现。 Oracle 实际上已经发布了一个官方提供程序,它是 ODP.NET 的一部分。我会推荐这个,因为它是免费的:

      http://www.oracle.com/technetwork/issue-archive/2011/11-sep/o51odt-453447.html

      附: - Devart LinqConnect 提供程序不是真正 Linq to SQL 提供程序。它们提供的类模仿 Linq to SQL 类的结构和功能(DataContextEntitySet<T> 等),但它们位于不同的命名空间中。除了 Microsoft 之外,任何人都不可能实现 Linq to SQL 提供程序,因为他们从未通过公共类型公开提供程序模型。

      【讨论】:

        猜你喜欢
        • 2014-03-06
        • 1970-01-01
        • 2013-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-06
        • 1970-01-01
        相关资源
        最近更新 更多