2012-02-26 142 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提供程序,因爲他們從不公開類型提供者模型。