【发布时间】:2016-08-30 08:26:09
【问题描述】:
我创建了 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,但不幸的是,在控制器的 POST 方法中,引用的实体“Guest”和“Event”为空。
【问题讨论】:
-
您找到解决方案了吗?
-
并非如此。我更改了我的模型,因此它会公开外键的 ID 属性。在我的请求中,我设置了 ID,并在服务器上从数据库中获取带有 ID 的对象。然后我可以使用 EF 方法来做我的 CRUD。
标签: asp.net-web-api odata