自从我和EF和OData合作以来已经有几年了。那时候,OData在WebAPI上仅限于某些URL过滤器,但即使是在MVC 4 RTM之前的最后一分钟也是如此。
很多都改变了。
现在我有一个带有EDMX文件的模型优先EF6项目,因为我喜欢在视觉上规划我的模型。我也在使用WebAPI 2.2和OData 4.0为这个应用程序构建OData服务。
对以下问题发表评论:
"不幸的是,目前EF使用的EDM模型与Web API OData使用的EDM模型不同。"
这是可以理解的,分离最适合公共API。
然而,我感到困惑,因为网上的快速入门教程(见下文)似乎对OData和数据库使用相同的EF(代码优先)模型。
这是否意味着模型不再不同,上面的评论是旧的?或者这是否意味着如果我想公开我的数据库模型,我必须先进行代码编写?
由于教程似乎显示了单个EF数据库模型的暴露,那么如何分离和拥有两个模型呢?
我很难找到/信任在线资源,因为这些技术发展如此之快。
路
答案 0 :(得分:3)
这是我迄今为止学到的东西。
OData v4不支持插入现有的模型优先EDMX模型类。
它确实支持暴露任意的'从POCO类构建的模型,实体之间的关系不是用这么强的术语表达的,但是v4模型更像是一个对象层次结构,甚至可以有一个单一的根节点'并且所有子项和项目集合都可以分支,图表。
使用路由规则和模型和控制器操作名称的一些简单约定,这一切都失败了。
因此可以围绕内存结构或no-sql或其他服务构建OData服务。
但是,当涉及到SQL源和EF时,必须将模型结合在一起才能使IQueryable逻辑流动,而且还必须用于字段名称映射。
由于OData v4模型构建器仅支持POCO类,因此必须先进行代码。
带有EF的OData v4仅限于绿地项目或那些在v4中有足够的增值值以保证重建代码优先的项目。
我正在研究现有数据库中代码优先的自动POCO生成。这将允许EDMX生成SQL数据库,然后"往返"它通过DB的自动POCO生成返回代码。从未使用过代码优先,我不确定这是否可以做到。
重要自2015年1月起,Excel或LinqPad均未支持v4。元数据是不同的,我认为由于缺乏正式的'关系。这使得v4目前不是很吸引人,尤其是当WCF数据服务可以在几秒钟内从现有EDMX构建完整服务时。
<强>更新强>
1 /
现有代码优先:
http://msdn.microsoft.com/en-us/library/jj200620.aspx
2 /
如果使用fluent API,您可以通过应用[NotMapped]
或modelBuilder.Ignore<InMemClass>();
来排除EF模型中的实体,即使它们在其他实体中被引用。
路