我希望在我的应用程序中使用实体框架作为数据库层,但我发现它不支持 oracle 数据库,为此我需要使用第三方提供商。
但是我想构建支持多个数据库(Oracle,MS Sql Server)的数据库层,同时支持像 LinqToSql 和 devart 这样的实体模型。
如果有人有任何信息可以帮助我,我将不胜感激。谢谢。
我希望在我的应用程序中使用实体框架作为数据库层,但我发现它不支持 oracle 数据库,为此我需要使用第三方提供商。
但是我想构建支持多个数据库(Oracle,MS Sql Server)的数据库层,同时支持像 LinqToSql 和 devart 这样的实体模型。
如果有人有任何信息可以帮助我,我将不胜感激。谢谢。
您在这里想要的可能是存储库模式,它可以位于中间,这样您的应用程序就不会关心底层数据的存储方式。
您可以使用类似我的存储库模式(在此处阅读:http: //blog.staticvoid.co.nz/2011/10/staticvoid-repository-pattern-nuget.html)并为 oracle 实现自定义 IRepositoryDataSource(您可以通过使用来自 codeplex 的 LINQ to oracle 提供程序(http://linqtooracle.codeplex.com/)来做到这一点,或者您可以编写自己的存储库,其中包含 sql 和 oracle 的实现。
我发现来自 (devart) 的 linqconnect 组件可以满足我的需要。
实体框架不包括除 SQL Server 之外的任何 RDBMS 的现成提供程序。任何希望支持 EF 的第三方 RDBMS 供应商都应根据 Microsoft 的提供程序模型提供自己的实现。Oracle 实际上已经发布了一个官方提供程序,它是 ODP.NET 的一部分。我会推荐这个,因为它是免费的:
http://www.oracle.com/technetwork/issue-archive/2011/11-sep/o51odt-453447.html
PS - Devart LinqConnect 提供程序并不是真正的Linq to SQL 提供程序。它们提供的类模仿 Linq to SQL 类的结构和功能(DataContext
、EntitySet<T>
等),但它们位于不同的命名空间中。除了 Microsoft 之外,任何人都不可能实现 Linq to SQL 提供程序,因为他们从未通过公共类型公开提供程序模型。