Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api WebApi 2 ODataConventionModelBuilder元数据存在问题_Asp.net Web Api_Breeze_Asp.net Web Api2 - Fatal编程技术网

Asp.net web api WebApi 2 ODataConventionModelBuilder元数据存在问题

Asp.net web api WebApi 2 ODataConventionModelBuilder元数据存在问题,asp.net-web-api,breeze,asp.net-web-api2,Asp.net Web Api,Breeze,Asp.net Web Api2,我目前正在使用EF6和代码优先的方法开发ODataWebAPI2服务 breeze文档建议使用EdmBuilder而不是ODataConventionModelBuilder,原因有多种()。我对此有几个问题-: 1) ODataConventionModelBuilder似乎没有生成“ReferentialConstraint”标记,因此在使用breeze js客户端时$expand之后对$select产生影响。但奇怪的是,当直接在浏览器中输入时(使用$expand和$select),同样的方

我目前正在使用EF6和代码优先的方法开发ODataWebAPI2服务

breeze文档建议使用EdmBuilder而不是ODataConventionModelBuilder,原因有多种()。我对此有几个问题-:

1) ODataConventionModelBuilder似乎没有生成“ReferentialConstraint”标记,因此在使用breeze js客户端时$expand之后对$select产生影响。但奇怪的是,当直接在浏览器中输入时(使用$expand和$select),同样的方法似乎也能起作用。使用ODataConventionModelBuilder有什么解决办法吗?链接中所述的所有问题是否仍然适用


2) 我们选择了纯OData服务,以使我们的API可供各种OData消费者访问,我们希望保持我们的服务通用性,而不带有任何微风的味道。添加EdmBuilder是否会使服务变得特定?

因为您发现Microsoft的ODataConventionModelBuilder不提供参考约束。到目前为止,使用EdmBuilder是唯一的解决方法。使用EdmBuilder不会使服务特定于breeze,因为那里没有特定于breeze的代码。(EdmBuilder的代码实际上是由Microsoft工程师提供的。)但是,使用EdmBuilder确实会妨碍您使用ODataConventionModelBuilder的其余功能,这很烦人

我们正在考虑的是,允许通过一系列api调用修改/更新从服务器交付的OData元数据,您可以直接在客户机上声明关系约束。然后,您将使用ODataConventionModelBuilder而不是EdmBuilder,并使用“新”api“重置”约束。这显然不如从服务器检索数据好,但在MS修复ODataConventionModelBuilder之前,这可能是我们最好的选择

这在您的场景中有价值吗


另外,请联系MS,让他们知道您的挫折感。:)

Jay,现在使用EdmBuilder听起来是一个更好的选择。EdmBuilder是否也有助于解决您网站中所述的其他问题,即交易、批量保存和保存订单。Jay,除了上述问题之外,奇怪的是,仅使用简单的datajs,我就能够使用odata/Categories(1)?$expand=Products&$select=Products对使用ODataConventionModelBuilder的服务进行查询。同一查询通过breeze返回“property not found error”。现在我感到困惑了:(我们不是说Web API OData不能返回相关数据的图表,而是说它不提供引用信息(FKs)Breeze需要维护关系。使用straight data.js,您可以发出展开查询并接收嵌套在
类别
结果中的相关数据。但是,这些返回的数据不是实体,并且
类别。产品
数组将不会被维护(例如,后续添加或删除)通过客户端上的任何设备…如果由Breeze管理,您可能会想到。模型生成器-无论是
ODataConventionModelBuilder
还是
EdmBuilder
-都向OData描述模型,并且是客户端的元数据源。它与OData如何处理批处理保存请求无关。这由
batchHandler
。今天唯一推出的
batchHandler
DefaultODataBatchHandler
…这是我们在文档中描述的所有方式中都缺少的。我担心这些问题的解决方案将采用MS或其他人编写的不同
batchHandler
的形式,或者可能是完全不同的erent Web API OData管道。我们希望:-)根据评论,我们决定使用EdmBuilder,因为使用它可以帮助我们使用Breeze提供的功能+1用于超级快速响应。但愿微软能很快推出ODataConventionModelBuilder的修正版,祈祷好运:)