4

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

4

2 回答 2

5

序列化是唯一的方法。

几个月前,我曾为此大吵大闹。AFAIK 从那以后什么都没有改变,我个人不希望他们改变太多。简而言之,截至 2012 年 9 月,没有计划在 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
于 2013-11-07T16:36:29.997 回答
5

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

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

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

有关用法的示例,请参见此处

于 2014-01-28T19:31:34.820 回答