【发布时间】:2013-11-17 15:56:02
【问题描述】:
标题确实说明了一切。我发现了几个不同方式的博客(将 EF 模型序列化为 XML,然后再次反序列化为 IEdmModel 就是其中之一),但它们都是基于旧版本的 OData 包。
【问题讨论】:
标签: asp.net-web-api odata asp.net-web-api-odata
标题确实说明了一切。我发现了几个不同方式的博客(将 EF 模型序列化为 XML,然后再次反序列化为 IEdmModel 就是其中之一),但它们都是基于旧版本的 OData 包。
【问题讨论】:
标签: asp.net-web-api odata asp.net-web-api-odata
序列化是唯一的方法。
几个月前我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
【讨论】:
return 语句中看到它使用Microsoft.Data.Edm.Csdl.EdmxReader.Parse,这显然会产生Microsoft.Data.Edm.IEdmModel,而我们想要IEdmModel 在OData 命名空间中。
DbContext 序列化的 edmx。我放弃并降级到 OData v3。
Microsoft.Data.Edm.Csdl.CsdlWriter 写入都是 OData v3。但是Microsoft.OData.Edm.Csdl.CsdlReader 只接受 OData v4。我一直无法找到连接这两者的方法。 EDMX 也是如此。我有一个非常大的数据库模型,我想通过 OData v4 访问它。我已经使用 EF 向导创建了模型,并且可以使用 WCF 数据服务和 OData v3 访问它。你有什么想法我可以尝试使它与 OData v4 一起工作吗?
如果您的 DbContext 是从数据库优先的方法构建的,则给定的答案将失败并给出此错误:
不支持创建 DbModelBuilder 或从使用 Database First 或 Model First 创建的 DbContext 编写 EDMX。 EDMX 只能从不使用现有 DbCompiledModel 创建的 Code First DbContext 中获取。
经过一段时间的处理,我找到了合适的解决方案。基本上,您从包含相关 DbContext 的程序集中获取 CSDL 资源,并使用 Microsoft.Data.Edm.Csdl.CsdlReader.TryParse 方法对其进行解析。生成的 IEdmModel 是有效的,其中包含构建模型时 EntityFramework 给出的确切信息。
在这里查看example with usage
【讨论】: