如何从Entity Framework模型构建OData IEdmModel

时间:2013-11-06 12:02:37

标签: asp.net-web-api odata asp.net-web-api-odata

标题说明了一切。我发现了几个不同方式的博客(将EF模型序列化为XML,然后再次反序列化为IEdmModel),但它们都基于旧版本的OData包。

2 个答案:

答案 0 :(得分:5)

序列化是唯一的方法。

几个月前我已经ranted about this了。从那时起AFAIK没有任何改变,我个人并不认为它们会发生太大变化。简短的故事是as of September 2012,没有计划在EF中使用EdmLib,也没有在其他项目中使用EF的代码。

  

我们应该与OData的EdmLib对齐多少?

Not worth adopting code
    Cost of implementing SSDL & MSL
    Freedom to evolve our API independently 
Look at aligning names of types and properties where appropriate

答案 1 :(得分:5)

如果您的DbContext是从数据库优先方法构建的,那么给定的答案将会失败,从而出现此错误:

  

不支持从使用Database First或Model First创建的DbContext创建DbModelBuilder或编写EDMX。 EDMX只能从不使用现有DbCompiledModel创建的Code First DbContext中获取。

经过一段时间搞乱这个,我找到了一个合适的解决方案。基本上,您从包含相关DbContext的程序集中获取CSDL资源,并使用 Microsoft.Data.Edm.Csdl.CsdlReader.TryParse 方法对其进行解析。生成的IEdmModel有效,包含构建模型时EntityFramework给出的确切信息。

点击此处查看example with usage