我可以使用以下方法从此关系的任一端成功获取相关项目:
现在我正在尝试管理它们之间的关系。我发现有一些例子,我已经尝试过但都没有用。 Heres one和heres another。
public class Exercise
{
public int Id { get; set; }
public virtual ICollection<Measurement> Measurements { get; set; }
}
public class Measurement
{
public int Id { get; set; }
public virtual ICollection<Exercise> Exercises { get; set; }
}
以下是我尝试过的行动及其要求:
[HttpDelete]
public IHttpActionResult DeleteRef([FromODataUri] int key, [FromODataUri] string relatedKey, string navigationProperty)
{
return StatusCode(HttpStatusCode.NoContent);
}
网址:http://localhost/api/Exercises(1)/Measurements $ id = http://localhost/api/Measurements(4)
结果:404
[HttpDelete]
[ODataRoute("Exercises({key})/Measurements({relatedKey})/$ref")]
public IHttpActionResult DeleteMeasurementFromExercise(int key, int relatedKey)
{
return StatusCode(HttpStatusCode.NoContent);
}
网址:不适用
结果:服务器错误:The path template 'Exercises({key})/Measurements({relatedKey})/$ref' on the action 'DeleteMeasurementFromExercise' in controller 'Exercises' is not a valid OData path template. The URI segment '$ref' is invalid after the segment 'Measurements({relatedKey})'.
This guy具有相同的症状,并且能够在Microsoft发布修复程序后解决此问题。我正在运行最新版本的Web API和oData,但仍然存在这个问题。
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.OData" version="5.9.0" targetFramework="net46" />
<package id="Microsoft.OData.Core" version="6.15.0" targetFramework="net46" />
<package id="Microsoft.OData.Edm" version="6.15.0" targetFramework="net46" />
答案 0 :(得分:1)
像往常一样,在向SO发布问题后几分钟,问题的答案我会坚持几天。
根据this documentation底部的删除实体之间的关系,我的网址应如下所示:
DELETE http://host/Suppliers(1)/Products/$ref?$id=http://host/Products(1)
这样的行动:
public IHttpActionResult DeleteRef([FromODataUri] int key, [FromODataUri] string relatedKey, string navigationProperty)
{
return StatusCode(HttpStatusCode.NoContent);
}
文档错误。经过一番挖掘,我发现你的网址应该是这样的:
DELETE http://host/Suppliers(1)/Products(2)/$ref
答案 1 :(得分:0)
我很痛苦地发现,可以更早地解决此问题的另一件事是,检查从全局发现URL检索到的实体元数据文件。它将在关系的任一端都包括两个实体,以及用于多对多关系的任何联接表。这将为您提供用于每个对象的有效名称。
MS需要认真修复和改善CDS的用户体验,或者只是放弃Fing。十多年来,这一直是一场沉闷的噩梦。