2014-10-17 62 views
0

(使用:Visual Studio 2010中,SQL Server 2012中,實體框架4.0,MVC3 Web應用程序)問題對象

我表一個一對多和多對多的一對多關係,我用(數據庫優先)自動生成模型類,這意味着我有從EntityObject繼承的對象和繼承自ObjectContext的基類。

我遇到了(插入,更新,刪除)對象的問題。

例如創建對象時:我有2個表(AreaCell)和中間表(CellArea)之間的多對多的關係,以及我要添加其被連接到許多新的Cell對象區,所以我做了下面的代碼:

Cell _cell = new Cell() 

foreach (Area ar in current_areas) 
{      
    var ca = new CellArea(); 
    //ca attributes 
    _cell.CellAreas.Add(ca); 
} 

db.SaveChanges(); 

db.Cells.AddObject(_cell); 

db.SaveChanges(); 

我嘗試過其他的代碼片段,其中沒有工作,我總是得到IEntityChangeTracker和其他類似例外。

什麼是管理這種情況的正確方法?

+0

您需要包含更多關於您正在獲取的特定例外的信息。 IEntityChangeTracker是一個接口,不是一個例外。如果您需要幫助,您需要提供足夠的信息,以便可以確定問題所在。 – user469104 2014-10-17 13:31:12

+0

我在不同的操作有很多例外,所以我認爲我是以錯誤的方式處理EF,在上面的例子中,當只有一個區域添加時,我得到「InvalidOperationException:一個實體對象不能被多個IEntityChangeTracker實例引用。 「 添加_cell對象的例外情況。 當添加了多個區域時,我也會得到「InvalidOperationException:無法定義兩個對象之間的關係,因爲它們連接到不同的ObjectContext對象。」在添加區域行中是例外。 – 2014-10-17 13:47:52

回答

0

當存在可交互關係時,EF應創建所謂的導航屬性。在執行初始查詢時,您可以選擇是否加載這些屬性。特別是EF有一個名爲Include的關鍵字,允許您隨意填充這些其他屬性。如果包含所有其他日期並做出任何更改,則只需調用SaveChanges方法,並將原始表格數據和所有導航屬性數據一次性保存。

Google「EF Include」