2012-12-13 160 views
2

我與MVC &實體框架和嘗試跟蹤更改。這是我的代碼片段:實體框架跟蹤變化

string historyText = "<ul>"; 
ICollection<LookUp> oldPositions = fromDB.LookUps; 

fromDB.LookUps.Clear(); 
IEnumerable<LookUp> allPositionTypes = lookUpRepository.GetByLookupTypeId(24); 
foreach (var interest in chkPositionType) 
{ 
    fromDB.LookUps.Add(allPositionTypes.Where(x => x.LookUpID == Convert.ToInt32(interest)).Single()); 
    if (!oldPositions.Contains(allPositionTypes.Where(x => x.LookUpID == Convert.ToInt32(interest)).Single())) 
     historyText += "<li>" + "Position Type : <span class='history-old'> </span><span class='history-separator'>|</span><span class='history-new'>" + lkupRepo.GetByID(Convert.ToInt32(interest)).Name + "</span></li>"; 
} 
historyText += "</ul>"; 

由於某種原因,只要我清除查找,它就會將oldPositions設置爲null。我還想知道我添加的那些新的和那些被刪除但沒有再添加的。所以基本上需要跟蹤變化。

有什麼替代方法嗎?如果它更好,我也可以採用它。

+0

'oldPositions'和'fromDB.LookUps'引用同一個對象。 –

回答

2
  1. 變化oldPosition枚舉查找的,像下面
    變種oldPositions = fromDB.LookUps.ToList();

  2. 刪除fromDB.LookUps.Clear()它應該工作。

+0

謝謝!它修復了:) –

0

我相信oldPositions在調用Clear()方法時會失去對fromDB.Lookups的引用。

ICollection oldPositions = fromDB.LookUps;

fromDB.LookUps.Clear();

oldPositions有一個fromDB.LookUps集合的引用指針。從DB.LookUps集合引用到元素中的其他對象被釋放,所以oldPositions將是空的。