2014-03-19 93 views
2

我並不確定這是否是OData問題,WCF,EF或什麼;我是新手,這些線條仍然模糊。是否可以使用相關實體(而不是相關ID)使用OData創建實體?

我一直在嘗試在C#MVC .NET應用程序中使用OData服務創建一些實體。通過使用相關實體的ID做它似乎工作正常,例如:

Container c = getContainer(); 
Foo f = new Foo(); 
f.Name = "blah"; 
f.ThingId = 7; 
c.AddToFoos(f); 
c.SaveChanges(); 

但是,直接使用相關實體不起作用。這在我使用本地SQL數據庫時適用,但不適用於OData服務。例如:

Container c = getContainer(); 
Foo f = new Foo(); 
Thing t = c.Things.Where(v => v.id==7).FirstOrDefault(); 
f.Name = "blah"; 
f.Thing = t; 
c.AddToFoos(f); // or Attach(f) 
c.SaveChanges(); 

此外,使用SetLink也不起作用。在所有的失敗情況下,請求中的Id都設置爲0。在SetLink的情況下,它有一個@odata.bind參數。

由於請求中ID爲0,這似乎是客戶端映射問題。是否有可能讓這種行爲起作用?

回答

0

這與稱爲批處理的功能有關。你可以嘗試這樣的代碼:

Container c = getContainer(); 
Foo f = new Foo(); 
f.Name = "blah"; 
c.AddToFoos(f); 

Thing t = c.Things.Where(v => v.id==7).FirstOrDefault(); 
c.AddLink(f, "Thing", t); // Thing is the Navigation property name from f to t. 

c.SaveChanges(SaveChangesOptions.BatchWithSingleChangeset); 
相關問題