2

私は 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>";

何らかの理由で、ルックアップをクリアするとすぐに、oldPositions も null に設定されます。また、新しく追加したものと、削除されたが再度追加されなかったものも知りたいです。したがって、基本的に変更を追跡する必要があります。

別の方法はありますか?そのほうがよければ、私もそれを採用できます。

4

2 に答える 2

2
  1. 以下のように、oldPosition を LookUp の列挙に変更します

  2. fromDB.LookUps.Clear() を削除すると、機能するはずです。

于 2012-12-13T16:13:20.817 に答える
0

Clear()メソッドを呼び出すと、oldPositionsがfromDB.Lookupsへの参照を失っていると思います。

ICollection oldPositions = fromDB.LookUps;

fromDB.LookUps.Clear();

oldPositionsには、fromDB.LookUpsコレクションへの参照ポインターがあります。要素からの他のオブジェクトへのfromDB.LookUpsコレクション参照が解放されるため、oldPositionsは空になります。

于 2012-12-13T16:39:16.997 に答える