C# 跟踪变化的实体框架

C# 跟踪变化的实体框架,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我是MVC&Entity Framework的新手,并尝试跟踪更改。以下是我的代码片段: string historyText = "<ul>"; ICollection<LookUp> oldPositions = fromDB.LookUps; fromDB.LookUps.Clear(); IEnumerable<LookUp> allPositionTypes = lookUpRepository.GetByLookupTypeId(24); for

我是MVC&Entity Framework的新手,并尝试跟踪更改。以下是我的代码片段:

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>";
字符串历史文本=“
    ”; ICollection oldPositions=fromDB.LookUps; fromDB.LookUps.Clear(); IEnumerable allPositionTypes=lookUpRepository.GetByLookupTypeId(24); foreach(chkPositionType中的var权益) { fromDB.LookUps.Add(allPositionTypes.Where(x=>x.LookUpID==Convert.ToInt32(interest)).Single()); 如果(!oldPositions.Contains(allPositionTypes.Where(x=>x.LookUpID==Convert.ToInt32(interest)).Single()) historyText+=“
  • ”+“位置类型:|“+lkupRepo.GetByID(Convert.ToInt32(interest)).Name+”
  • ”; } 历史文本+=“
”;
出于某种原因,我一清除查找,它就会将oldPositions设置为null。我还想知道哪些是我新增的,哪些是被删除但没有再新增的。所以基本上需要跟踪变化

有别的办法吗?如果更好的话,我也可以收养它

  • 将oldPosition更改为枚举查找,如下所示
    var oldPositions=fromDB.LookUps.ToList()

  • 删除fromDB.LookUps.Clear(),它应该可以工作


  • 我认为调用Clear()方法时,oldPositions正在丢失对fromDB.Lookups的引用

    ICollection oldPositions=fromDB.LookUps

    fromDB.LookUps.Clear()


    oldPositions有一个指向fromDB.LookUps集合的引用指针。fromDB.LookUps集合对元素中其他对象的引用被释放,因此oldPositions将为空。

    oldPositions
    fromDB.LookUps
    引用了同一对象。