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

Posted

技术标签:

【中文标题】如何使用实体框架实现数据库独立性【英文标题】:How to Implement Database Independence with Entity Framework 【发布时间】:2010-09-09 17:03:19 【问题描述】:

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

我有一个架构极其相似的 Oracle 数据库(我试图准确,但我不知道 Oracle 的所有细节)。我希望我的项目能够轻松地在 SQL Server 和 Oracle 数据存储上运行。我希望我可以简单地更改我的实体数据模型的配置字符串,而实体框架会处理剩下的事情。但是,它似乎不会像我想象的那样无缝地工作。

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

【问题讨论】:

LOL 如果它不提供数据库无知,那么实体框架有什么用?天哪! @YeahStu .. 我有同样的要求,因为我看到帖子很老了... Entity Framework 到目前为止已经修改过.. 你是否能够使用 EF 实现数据库独立性.. 请帮助我和这个分享你的解决方法......提前非常感谢。 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

主要问题是实体框架的设计没有考虑到持久性无知。老实说,我会考虑使用实体框架以外的东西。

【讨论】:

以上是关于如何使用实体框架实现数据库独立性的主要内容,如果未能解决你的问题,请参考以下文章

如何实现 IDbContextFactory 以用于实体框架数据迁移

如何使用实体框架测试视图?

如何将实体框架用于具有多个客户端的应用程序

DAL 中的实体框架存储库模式,如何实现更新功能?

如何模拟EntityManager?

独立于模式的实体框架代码优先迁移