Breeze and the EdmBuilder for OData v4

9
我能够使用WebApiOdata和EntityFramework在服务器端创建一个OData(v3)服务,并在客户端使用Breeze,感谢这个文档
现在我想使用OData规范的第4版来完成同样的工作,但是出现了问题。Breeze提供的EdmBuilder类依赖于与版本3相关的'Microsoft.Data.Edm'。
在EdmBuilder中,这两行代码会阻止项目构建:
using Microsoft.Data.Edm.Csdl;
using Microsoft.Data.Edm.Validation;

这很正常,因为我的项目引用了'Microsoft.OData.Edm'(v4)而不是'Microsoft.Data.Edm'(v3)。

所以我把两个using语句替换成了这个:

using Microsoft.OData.Edm;
using Microsoft.OData.Edm.Csdl;
using Microsoft.OData.Edm.Validation;

现在项目可以构建,但在运行时会抛出以下异常:

"解析EDMX文档时遇到以下错误: UnexpectedXmlElement:根元素不应为Edmx,而是'Edmx'。:(1, 40)"

这个问题出现在EdmBuilder类的这个位置:

using (var reader = XmlReader.Create(stream))
            {
                return EdmxReader.Parse(reader);
            }

有没有什么办法解决这个问题?比如说我可以在某个地方下载到一个新的EdmBuilder类?

P.S.:我正在使用Code First迁移,以及在“WebApiConfig”中配置OData路由的代码:

config.MapODataServiceRoute(
            routeName: "ODataRoute",
            routePrefix: "OData",
            model: EdmBuilder.GetEdm<MyDbContext>(),
            batchHandler: new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer));
1个回答

7
我们目前正在开发与OData v4.0兼容的轻松发布版本。在不久的将来,我会在这里发布它的信息。

我真的很希望EdmBuilder能够像ODataCoventionBuilder一样支持添加EntitySets,而不仅仅是使用DbContext。我不使用EF是因为我们是基于存储过程的。 - Richard Collette
在我的V3项目中,我刚刚更新了“microsoft.aspnet.webapi.odata”(版本5.1.2)库,惊讶地发现ODataConventionModelBuilder可以正常工作。我像这样注册我的OData路由:ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.EntitySet<Product>("Products"); config.Routes.MapODataRoute(routeName: "odata",routePrefix: "odata",model: builder.GetEdmModel(),batchHandler: new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer)); 现在我不再遇到“406不可接受”的错误!所以,是不是不需要breeze emdbuilder了? - dafriskymonkey
我开始为客户端BreezeJS开发一个OData v4适配器,该适配器使用上面@JayTraband提到的olingo库。这是非常早期的工作进展,欢迎贡献!https://github.com/michaelbromley/breezejs-odata4-adapter - Michael Bromley
嗨,Jay。有关于创建一个可以生成OData.Edm.IEdmModel而不是Data.Edm.IEdmModelEdmBuilder的任何消息吗? - Asad Saeeduddin
@dafriskymonkey ODataConventionModelBuilder 只在一些特定情况下起作用,即当您的模型确实符合约定时。 - Asad Saeeduddin
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接