2010-11-22 6 views
1

次のコードを使用して、trasaOriginalに割り当てられたすべてのKlientDoTrasaを削除し、コレクションに基づいて新しいKlientDoTrasaを作成して割り当てます:trasaToEdit.Klienci。私のテストケースでは、KlientDoTrasaと新しいKlientDoTrasaが同じであるので、EF4はデータベースにクエリを送信すべきではないと思っていますが、最初に削除してから挿入します。それを制限する方法はありますか?EF4がDBに送信するクエリの数を減らす方法は?

public void Edit(int trasaId, TrasaEditViewModel trasaToEdit) 
{ 
    Trasa trasaOriginal = _trasaRepository.FindById(trasaId); 

    trasaOriginal.Nazwa = trasaToEdit.Trasa.Nazwa; 

    foreach(KlientDoTrasa kdt in trasaOriginal.KlientDoTrasa.ToList()) 
    { 
     _klientDoTrasaRepository.Remove(kdt); 
    } 

    for(int i = 0; i < trasaToEdit.Klienci.Count; i++) 
    { 
     var kdt = new KlientDoTrasa {Trasa = trasaOriginal, KlientId = trasaToEdit.Klienci[i].Id, Seq = i}; 
     _klientDoTrasaRepository.Add(kdt); 
    } 

    _klientDoTrasaRepository.SaveChanges(); 
    _trasaRepository.SaveChanges(); 
} 

答えて

1

エンティティフレームワークはエンティティを完全に比較して同等かどうかを判断しません。上記のコードでは、2つのエンティティが異なると仮定して挿入を削除します。

変更されていないエンティティを更新しないようにするには、独自のロジックでエンティティを確認する必要があります。私はあなたのエンティティのためにIEqualityComparerを実装するために、部分的なクラス宣言を使用し、次に提出する前に比較することができると信じています。

関連する問題