实体数据模型(.edmx 文件)是不是与 ORM 无关?

Posted

技术标签:

【中文标题】实体数据模型(.edmx 文件)是不是与 ORM 无关?【英文标题】:Is entity data-model (.edmx files) ORM-agnostic?实体数据模型(.edmx 文件)是否与 ORM 无关? 【发布时间】:2012-02-15 19:35:31 【问题描述】:

在使用 NHibernate 几年后,我现在正在学习 Entity Framework 以用于我的下一个项目。目前,我正在尝试在代码优先或模型优先方法之间做出决定。模型优先的方法对我很有吸引力,但结果必须与 ORM 无关。为此,我正在思考以下几点。从 .edmx 文件的 CSDL 和 C-S 映射内容创建 T4 模板是否可行且实用?

【问题讨论】:

【参考方案1】:

没有映射与 ORM 无关,因为它是 ORM API 的一部分,或者您是否看到使用 NHibernate 的 hbm 文件的实体框架? EDMX 是 EDM(实体数据模型)的 XML 表示,它是 MS 资产,主要用于 MS API。此外,并非所有 MS 提供的用于 EDM 处理的 API 都是可访问的(内部实现)。 EDMX 与 ORM 无关。更糟糕的是,它甚至与数据库无关。

无论如何,您都可以创建以 EDMX 作为输入并提供其他映射作为输出的任何自定义工具或转换。您只需要了解输入和输出格式。我不确定 T4 是否可以直接实现,但绝对可以。但这将不实用。 Practical 正在充分利用单个 ORM 并使用可用于该 ORM 的工具。

【讨论】:

如果 EDMX 被简单地视为 XML 文件,那么它没有使用实体框架 API,对吗?我不会试图对 MS API 保持不可知论,因为这是整个 .NET。 嗯,我的意思是 NHibernate 和其他 ORM 都不能使用 EDMX,所以它不是不可知的。它是 XML 并且您可以创建转换这一事实并没有改变它。我会很容易地编写一些 EDMX,因为它将使用包括 ESQL 查询在内的 EF 高级功能,因此无需付出巨大的努力就无法转换。所以恕我直言,考虑从 EDMX 到其他东西的任何转换都不值得。在大多数情况下,您会更快地手动创建这些 hbm 文件。 还有哪些其他 ORM 不能使用这种方法,为什么不呢?您关于 ESQL 的观点很好。【参考方案2】:

创建 T4 模板以从 .edmx 文件为 Fluent NHibernate 生成类是可行且实用的。我在 AMD 的一个项目中正在做这件事。 (本人不是作者。)见:http://tom-jaeschke.blogspot.com/2011/08/use-entity-framework-and-nhibernate.html

【讨论】:

有趣。我正在考虑做相反的事情的可能性 - 我有一个已建立的 NHibernate 层 (NHQueryable),我想为其生成一个 EDMX 等效项,以便我可以使用某些依赖于 MS EDM 的 API(例如 Microsoft .Data.OData.Query)。

以上是关于实体数据模型(.edmx 文件)是不是与 ORM 无关?的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记31_ORM框架ModelFirst设计数据库

是否可以从实体数据模型(edmx)文件生成数据库?

有没有人将实体框架与代码优先方法与 Edmx 文件混合使用?

实体框架 ORM 不创建模型/表 [关闭]

模型中的多个图与一个大的.EDMX与多个.EDMX

如何让所有实体访问:EDMX 中的内部而不是公共?