如何降低EF4发送给DB的查询数量?

时间:2010-11-22 21:44:32

标签: entity-framework-4

我使用以下代码删除分配给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();
}

1 个答案:

答案 0 :(得分:1)

实体框架不会对您的实体进行深入比较,以确定它们是否相同。上面的代码将删除然后插入,假设两个实体不同。

如果您想避免更新未更改的实体,则需要在自己的逻辑中检查该实体。我相信您可以使用部分类声明为您的实体实现IEqualityComparer,然后在提交之前进行比较。