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

Entity framework 实体数据模型(.edmx文件)是否与ORM无关?,entity-framework,nhibernate,orm,Entity Framework,Nhibernate,Orm,在使用NHibernate几年之后,我现在正在学习实体框架,以便在我的下一个项目中使用。目前,我正在尝试选择代码优先还是模型优先的方法。模型优先的方法对我很有吸引力,但结果必须是ORM不可知论的。为此,我考虑以下几点。从.edmx文件的CSDL和C-S映射内容创建生成类和.hbm.xml文件(与NHibernate一起使用)的T4模板是否可行?没有映射是ORM不可知的,因为它是ORM API的一部分,或者您是否看到实体框架使用NHibernate的hbm文件?EDMX是EDM(实体数据模型)的X

在使用NHibernate几年之后,我现在正在学习实体框架,以便在我的下一个项目中使用。目前,我正在尝试选择代码优先还是模型优先的方法。模型优先的方法对我很有吸引力,但结果必须是ORM不可知论的。为此,我考虑以下几点。从.edmx文件的CSDL和C-S映射内容创建生成类和.hbm.xml文件(与NHibernate一起使用)的T4模板是否可行?

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


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

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


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

创建T4模板,从.edmx文件为Fluent NHibernate生成类,这是可行的。我在AMD做一个项目,我们正在做这个。(我自己不是作者。)参见:

创建T4模板是可行的,可以从.edmx文件为Fluent NHibernate生成类。我在AMD做一个项目,我们正在做这个。(我自己不是作者)请参见:

如果EDMX被简单地视为XML文件,那么它就没有使用实体框架API,对吗?一般来说,我不会试图对MS API保持不可知论,因为这是整个.NET。我的意思是,NHibernate和其他任何ORM都不能使用EDMX,所以它不是不可知论的。它是XML,您可以创建转换,这一事实并没有改变它。我将很容易地编写一些EDMX,如果不付出巨大努力,它将无法转换,因为它将使用EF高级功能,包括ESQL查询。因此,我认为任何从EDMX到其他东西的转换都是不值得的。在大多数情况下,您可以更快地手动创建这些hbm文件。还有哪些其他ORM不能使用这种方法,为什么不能?您关于ESQL的观点很好。如果EDMX被简单地视为XML文件,那么它没有使用实体框架API,对吗?一般来说,我不会试图对MS API保持不可知论,因为这是整个.NET。我的意思是,NHibernate和其他任何ORM都不能使用EDMX,所以它不是不可知论的。它是XML,您可以创建转换,这一事实并没有改变它。我将很容易地编写一些EDMX,如果不付出巨大努力,它将无法转换,因为它将使用EF高级功能,包括ESQL查询。因此,我认为任何从EDMX到其他东西的转换都是不值得的。在大多数情况下,您可以更快地手动创建这些hbm文件。还有哪些其他ORM不能使用这种方法,为什么不能?你关于ESQL的观点很好。很有趣。我正在考虑做相反的事情的可能性——我有一个已建立的NHibernate层(NHQueryable),我想为它生成一个等效的EDMX,这样我就可以使用依赖MS EDM的某些API(例如Microsoft.Data.OData.Query)。很有趣。我正在考虑做相反的事情的可能性——我有一个已建立的NHibernate层(NHQueryable),我想为它生成一个等效的EDMX,这样我就可以使用依赖于MS EDM的某些API(例如Microsoft.Data.OData.Query)。