2010-08-30 126 views
0

問題是,當我使用下面的代碼將從ListBox獲得的位置值分配給正在創建/編輯的分區時,EF創建一個新位置,然後輸入該位置ID,並且分區進入因此DivisionLocation表格會不必要地創建多個位置,如下所示。實體框架1.0問題

using (FRLEntities context = new FRLEntities()) 
{ 
    for (int i = 0; i < lstPicked.Items.Count; i++) 
    { 
     var lpn = cm.GetLocation(Convert.ToInt32(lstPicked.Items[i].Value)); 
     Location cLocation = new Location { LocationId = Convert.ToInt32(lstPicked.Items[i].Value), LocationName = lstPicked.Items[i].Text, LocationParentName = lpn.LocationParentName }; 
     //CurrentDivision.Location = new EntityCollection<Location>(); 
     CurrentDivision.Location.Add(cLocation); 
    } 
} 

提前一些數據

Division 
Divisionid   DevisionName 
1     1st Division 
2     2st Division 

Location 
LocationId   LocationName 
1     HG 
2     FG 
3     IK 
4     HG 
5     FG 

DivisionLocation 
DivisionId   LocationId 
1     1 
1     3 
2     1 
2     2 
2     4 
1     5 

感謝

回答

1

這是常見的問題。您在代碼中創建了Location實例,並且您沒有從EF上下文中加載它。因此Location實例與當前上下文無關,並且當您將新的CurrentDivision添加到上下文中時,所有相關的位置也將被視爲新對象。

如果你想避免這種情況,你必須以某種方式說EF的上下文哪些位置是新的,哪些是現有的。我正在使用這種方法:

context.ObjectStateManager.ChangeObjectState(lpn, EntityState.Unchagned);