我使用以下代码删除分配给trasaOriginal的所有KlientDoTrasa,然后根据集合创建并分配新的KlientDoTrasa:trasaToEdit.Klienci。在我的测试用例中分配的KlientDoTrasa和新的KlientDoTrasa是相同的,所以我认为EF4不应该向数据库发送任何查询,但它发送,首先删除然后插入。有没有办法限制它?
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();
}
答案 0 :(得分:1)
实体框架不会对您的实体进行深入比较,以确定它们是否相同。上面的代码将删除然后插入,假设两个实体不同。
如果您想避免更新未更改的实体,则需要在自己的逻辑中检查该实体。我相信您可以使用部分类声明为您的实体实现IEqualityComparer,然后在提交之前进行比较。