Entity framework 4 如何减少EF4发送到DB的查询数?

Entity framework 4 如何减少EF4发送到DB的查询数?,entity-framework-4,Entity Framework 4,我使用以下代码删除分配给trasaOriginal的所有KlientDoTrasa,然后基于集合创建并分配新的KlientDoTrasa:trasaToEdit.Klienci。在我的测试用例中,指定的KlientDoTrasa和新的KlientDoTrasa是相同的,所以我认为EF4不应该向数据库发送任何查询,但它先发送,然后删除,然后插入。有没有办法限制它 public void Edit(int trasaId, TrasaEditViewModel trasaToEdit) {

我使用以下代码删除分配给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();
}
public void Edit(int-trasaId,TrasaEditViewModel-trasaToEdit)
{
Trasa trasaOriginal=_trasaRepository.FindById(trasaId);
trasaOriginal.Nazwa=trasaToEdit.Trasa.Nazwa;
foreach(trasaOriginal.KlientDoTrasa.ToList()中的KlientDoTrasa kdt)
{
_klientDoTrasaRepository.Remove(kdt);
}
for(int i=0;i
实体框架不会对实体进行深入比较,以确定它们是否等效。假设两个实体不同,上面的代码将删除然后插入


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

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

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