2014-09-29 53 views
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方法的引用的實體「訪客」和「事件」爲空。

+0

您是否找到解決方案? – LueTm 2015-02-05 13:54:43

+0

不是。我改變了我的模型,以便公開外鍵的ID屬性。在我的請求中,我設置了ID,並在服務器上從數據庫中獲取ID爲對象。然後我可以使用EF方法來執行我的CRUD。 – crazy 2015-02-06 19:16:51

回答

0

您是否按照MSDN文檔中的示例嘗試過?我注意到它始終使用AddLink而不是SetLink,即使在SetLink文檔中也是如此。

MSN Article is here:DataServiceContext.SetLink Method