Asp.net web api OData V4 AddObject SetLink OData.bind不传输相关实体
我已经创建了一个ODataV4服务,在ASP.NET主页上的文章中有描述。 我基本上有一张桌子,可以安排客人参加活动。我需要这个多对多关系的附加信息,所以我创建了一个EventGuest表 通过OData插入事件和插入客人很好。它只是不想工作,只要我想插入相关的实体 这是我的控制器代码:Asp.net web api OData V4 AddObject SetLink OData.bind不传输相关实体,asp.net-web-api,odata,Asp.net Web Api,Odata,我已经创建了一个ODataV4服务,在ASP.NET主页上的文章中有描述。 我基本上有一张桌子,可以安排客人参加活动。我需要这个多对多关系的附加信息,所以我创建了一个EventGuest表 通过OData插入事件和插入客人很好。它只是不想工作,只要我想插入相关的实体 这是我的控制器代码: public async Task<IHttpActionResult> Post(EventGuest eventGuest) { if (!ModelState.IsValid)
public async Task<IHttpActionResult> Post(EventGuest eventGuest)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_db.EventGuest.AddOrUpdate(eventGuest);
await _db.SaveChangesAsync();
return Created(eventGuest);
}
发送到服务器的请求对我来说并不太糟糕:
{"@odata.type":"#Entities.EventGuest","CreationTimestamp":"0001-01-01T00:00:00Z","Guid":"adf500e3-e3a1-4841-883e-2322ed863321","ID":0,"Event@odata.bind":"http://localhost/odata/Event(1)","Guest@odata.bind":"http://localhost/odata/Guest(1)"}
因此,服务器尝试使用
@odata.bind
,但不幸的是,在控制器的POST方法中,引用的实体“Guest”和“Event”为空 您是否在MSDN文档中尝试过以下示例?我注意到它总是使用AddLink
而不是SetLink
,甚至在SetLink
文档中也是如此
MSN文章在这里:你找到解决这个问题的方法了吗?不太可能。我更改了我的模型,因此它将公开外键的ID属性。在我的请求中,我设置了ID,并在服务器上从数据库中取出ID为的对象。然后我可以使用EF方法来执行CRUD。
{"@odata.type":"#Entities.EventGuest","CreationTimestamp":"0001-01-01T00:00:00Z","Guid":"adf500e3-e3a1-4841-883e-2322ed863321","ID":0,"Event@odata.bind":"http://localhost/odata/Event(1)","Guest@odata.bind":"http://localhost/odata/Guest(1)"}