2012-02-26 144 views
1

我正在寻找在我的应用程序中使用实体框架作为数据库层,但我发现它不支持Oracle数据库,我将需要使用第三方提供者来达到此目的。跨数据库实体框架支持

但是我想构建数据库层支持多个数据库(Oracle,MS Sql Server)并且同时支持像LinqToSql和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的实现。

+0

实体框架已经从数据库中抽象出来。您不希望在其上实施另一个存储库。 – usr 2012-03-04 13:30:33

+0

Entity Framewok不完全从数据库中抽象出来。虽然它似乎。如果您在使用EF生成的实体的任何位置放置断点,则会看到编译器生成的代理类与实体类的类型不同。这对这些类的反射和二进制序列化有影响,尽管xml序列化似乎没有问题。这些代理包含用于跟踪更改的数据和行为。真正的抽象需要一个存储库模式或某种映射到POCO dto – 2012-05-04 08:37:28

1

实体框架不包括SQL Server以外的任何RDBMS的开箱即用提供程序。任何想要支持EF的第三方RDBMS供应商都有望根据微软的供应商模式提供自己的实施。事实上,Oracle已经发布了一个属于ODP.NET的官方提供商。我会推荐这一个,因为它是免费的:

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

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