如何用实体框架实现数据库独立性

时间:2008-09-16 19:22:34

标签: oracle entity-framework linq-to-entities

我使用Entity Framework来启动一个相当简单的示例项目。在项目中,我从SQL Server 2000数据库创建了一个新的实体数据模型。我能够使用LINQ to Entities查询数据并在屏幕上显示值。

我有一个非常相似的架构的Oracle数据库(我试图准确但我不知道Oracle的所有细节)。我希望我的项目能够以最小的努力在SQL Server和Oracle数据存储上运行。我希望我可以简单地更改我的实体数据模型的配置字符串,实体框架将处理其余部分。但是,似乎无法按照我的想法无缝地工作。

有没有人做过我想做的事情?同样,我正在尝试编写一个可以使用实体框架以最小的努力从SQL Server或Oracle数据库查询(和更新)数据的应用程序。次要目标是在数据存储之间来回切换时不必重新编译应用程序。如果我必须“从数据库更新模型”,这可能是好的,因为我不必重新编译,但我宁愿不必去这条路线。有谁知道可能需要的任何步骤?

2 个答案:

答案 0 :(得分:2)

术语“持久性无知”通常理解的是,您的实体类不会充斥着框架依赖性(对于N层方案很重要)。现在情况并非如此,因为实体类必须实现某些EF接口(“IPOCO”),而不是普通的旧CLR对象。正如另一张海报所提到的,有一个名为Persistence Ignorance (POCO) Adapter for Entity Framework V1的解决方案,而EF V2将支持开箱即用的POCO。

但我认为你真正想到的是数据库独立性。使用一个大的配置XML,包括存储模型,概念模型以及在设计时将从中生成类型化ObjectContext的两者之间的映射,我还发现很难想象如何透明地支持两个数据库。

可能看起来更有希望的是应用与DataDirect中的数据库无关的ADO.NET提供程序。 DataDirect还宣布了对Q3 / 2008的EF支持。

答案 1 :(得分:1)

http://blogs.msdn.com/jkowalski/archive/2008/09/09/persistence-ignorance-poco-adapter-for-entity-framework-v1.aspx

主要问题是实体框架的设计并未考虑到持久性无知。老实说,我会考虑使用除实体框架之外的其他东西。