一千萬個為什麽

搜索

不可能從EntityCollection復制到EntityCollection?

你會怎麽做(偽代碼):product1.Orders.AddRange(product2.Orders);

但是,函數“AddRange”不存在,那麽如何將EntityCollection“Orders”中的所有項目從product2復制到product1?

應該很簡單,但不是......

最佳答案

問題比你想象的要深。

您的 foreach 嘗試失敗,因為當您調用 product1.Orders.Add 時,實體將從 product2.Orders 中刪除,從而呈現現有的枚舉器無效,導致您看到的異常。

那麽為什麽實體會從produc2中刪除?好吧,看起來很簡單:因為訂單一次只能屬於一個產品。實體框架通過強制執行此類規則來處理數據完整性。

如果我理解正確,那麽您的目標是實際 復制 從一個產品到另一個產品的訂單,我是否正確?

如果是這樣,那麽您必須在 foreach 循環中顯式創建每個訂單的副本,然後將該副本添加到 product1

由於某些原因,我覺得很難,因此沒有自動創建實體副本的方法。因此,您幾乎必須逐個手動復制所有Order的屬性。您可以通過將此邏輯合並到Order類本身來使代碼看起來更整潔 - 創建一個名為Clone()的方法來復制所有屬性。但是,請確保不要復制“所有者產品參考”屬性,因為您的重點是給它另一個所有者產品,不是嗎?

無論如何,如果不清楚,請不要猶豫,提出更多問題。還有祝你好運。

轉載註明原文: 不可能從EntityCollection復制到EntityCollection?