Как уменьшить количество запросов, которые EF4 отправляет в БД? - PullRequest
1 голос
/ 23 ноября 2010

Я использую следующий код для удаления всех KlientDoTrasa, назначенных trasaOriginal, а затем создаю и назначаю новый 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 Ответ

1 голос
/ 23 ноября 2010

Entity Framework не проводит глубокое сравнение ваших сущностей, чтобы определить, эквивалентны ли они. Ваш код выше будет удалять, а затем вставлять, предполагая, что эти две сущности разные.

Если вы хотите избежать обновления сущности, которая не изменилась, вам нужно проверить это в своей собственной логике. Я полагаю, что вы можете использовать частичное объявление класса для реализации IEqualityComparer для ваших сущностей, а затем сравнить перед отправкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...