2
我已經在ASP.NET主頁上的文章中描述了創建的OData V4服務。 我基本上有一個表分配給客人的事件。我需要額外的信息來處理這種多對多的關係,所以我創建了一個EventGuest表。OData V4 AddObject SetLink odata.bind不傳送相關實體
插入事件並通過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,"[email protected]":"http://localhost/odata/Event(1)","[email protected]":"http://localhost/odata/Guest(1)"}
所以Server嘗試使用@odata.bind
,但遺憾的是在控制器的POST方法的引用的實體「訪客」和「事件」爲空。
您是否找到解決方案? – LueTm 2015-02-05 13:54:43
不是。我改變了我的模型,以便公開外鍵的ID屬性。在我的請求中,我設置了ID,並在服務器上從數據庫中獲取ID爲對象。然後我可以使用EF方法來執行我的CRUD。 – crazy 2015-02-06 19:16:51