2014-05-01 47 views
3

我正在嘗試更新附加了導航屬性的實體。無法設置類型屬性,因爲集合已被設置爲EntityCollection

public partial class Stock 
{ 
    #region Primitive Properties 

    public virtual int StockId 
    { 
     get; 
     set; 
    } 

    public virtual string StockName 
    { 
     get; 
     set; 
    } 

    #endregion 

    #region Navigation Properties 

    public virtual ICollection<Location> Locations 
    ... 
} 

這種運作良好時,我只需要插入實體在數據庫中,但是當我更新我的錯誤是:

「System.InvalidOperationException」類型的異常出現在 EntityFrameworkDynamicProxies-在 型酒店'位置「Stock_4654D170FFCE308BB1B9AF1E2018476DF2E1C2E1DBA137F58AB96BCB9FA:Trade.Sales.Presentation.Admin但 用戶代碼

其他信息沒有處理無法設置FC859' ,因爲集合已被設置爲 EntityCollection。

我通過一些其他職位的去了,但其被給予的解決辦法是:

修改性質非虛擬即卸下「虛擬」的關鍵字。然而,我的資深人士說,這是不能接受的,因爲這個類是自動生成的,並且一旦實體從數據庫中更新就會改變。

我們有其他的解決方案嗎?

+3

顯示實際拋出異常的代碼可能會有很大幫助。根據例外情況,我認爲,必須在某處存在類似'stock.Locations = someLocationsCollection'這樣的問題。也許使用'stock.Locations.Clear(); foreach(var loc中的someLocationsCollection)stock.Locations.Add(loc);'是替換集合作爲一個整體已經解決了問題。 – Slauma

+0

嗨Slaumna這效果很好。該foreach作出了這項工作..你可以答覆作爲答案被標記?謝謝。 –

回答

3

當然有一條線,如stock.Locations = myLocationCollection,這是導致問題。你想做些什麼做的是以下幾點:

stock.Locations.Clear(); 
foreach (var loc in myLocationsCollection) 
    stock.Locations.Add(loc); 

這是一個可以用來設置集合作爲一個整體的解決方法。