我已经创建了ASP.NET主页上的文章中描述的OData V4服务。 我基本上有一个表格事件,我分配给客人。我需要这个多对多关系的附加信息,所以我创建了一个EventGuest表。
插入事件并通过OData插入来宾工作正常。只要我想插入相关实体,它就不想工作。
这是我的控制器代码:
public async Task<IHttpActionResult> Post(EventGuest eventGuest)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_db.EventGuest.AddOrUpdate(eventGuest);
await _db.SaveChangesAsync();
return Created(eventGuest);
}
这就是我想要插入关系的方式。对于客户端代码,我使用官方T4模板。
var ev = container.Event.FirstOrDefault();
var guest = container.Guest.FirstOrDefault();
var evGuest = new EventGuest();
evGuest.Guid = Guid.NewGuid();
container.AddObject("EventGuest", evGuest);
container.SetLink(evGuest, "Event", ev);
container.SetLink(evGuest, "Guest", guest);
container.SaveChanges();
发送到服务器的请求对我来说并不太糟糕:
{"@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
,但不幸的是,在Controller的POST方法中,引用的实体“Guest”和“Event”为空。
答案 0 :(得分:0)
您是否尝试过MSDN文档中的示例?我注意到它总是使用AddLink
而不是SetLink
,即使在SetLink
文档中也是如此。
MSN文章在这里:DataServiceContext.SetLink Method