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

时间:2020-03-05 18:56:55  来源:igfitidea点击:

我已经使用实体框架启动了一个相当简单的示例项目。在该项目中,我从SQL Server 2000数据库创建了一个新的实体数据模型。我可以使用LINQ to Entities查询数据并在屏幕上显示值。

我有一个具有极为相似的架构的Oracle数据库(我想确切地说,但我不知道Oracle的所有详细信息)。我希望我的项目能够以最小的努力在SQL Server和Oracle数据存储上运行。我希望我可以简单地更改实体数据模型的配置字符串,而实体框架将负责其余的工作。但是,似乎无法像我所想的那样无缝运行。

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

解决方案

回答

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

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

回答

在术语"持久性无知"下通常可以理解的是,实体类不会被框架依赖项所淹没(对于N层方案很重要)。现在不是这种情况,因为实体类必须实现某些EF接口(" IPOCO"),而不是普通的旧CLR对象。正如另一位发布者所提到的,为此,有一个称为持久性无知(POCO)适配器的Entity Framework V1解决方案,而EF V2将立即支持POCO。

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

看起来更有希望的是应用独立于数据库的ADO.NET提供程序,例如DataDirect中的提供程序。 DataDirect还宣布了对2008年第三季度的EF支持。