Почему индивидуальные удаления звонков с удалением на каскад?

У меня есть две таблицы с отношением 1:n (одна animal имеет много animal_events) и удаление по каскаду в моей базе данных:

CREATE TABLE animals (
   Id             INTEGER         PRIMARY KEY   AUTO_INCREMENT,
   Description    VARCHAR(512),
   Timestamp      TIMESTAMP       
);

CREATE TABLE animal_events (
   Id            INTEGER         PRIMARY KEY   AUTO_INCREMENT,
   Begin         DATETIME      NOT NULL,
   AnimalId      INT,
   Timestamp     TIMESTAMP,
   FOREIGN KEY animal_fk(AnimalId) REFERENCES animals(Id) ON DELETE CASCADE
);

Поэтому, когда я удаляю animalвсе соответствующие animal_events следует также удалить. Это то, что делается базой данных, запускается предложением delete on cascade всякий раз, когда я удаляю животное. Правильный?

Но в трассировке SQL я вижу много отдельных команд удаления. Почему платформа Entity Framework/ Devart делает это?

DELETE FROM rfidfarm.animal_events WHERE Id = 1 
DELETE FROM rfidfarm.animal_events WHERE Id = 2 
DELETE FROM rfidfarm.animal_events WHERE Id = 3 

DELETE FROM animals WHERE Id = 1

Разве это не лишнее, так как база данных позаботится о animal_events или это просто ошибка в моей настройке / конфигурации EF?


Обновления

Извлечение для файла edml

<Association Name="animal_events_ibfk_2">
  <End Role="animals" Type="Model.Store.animals" Multiplicity="0..1">
    <OnDelete Action="Cascade" />
  </End>

Если я использую этот тестовый код, я вижу много отдельных удалений:

using (var uow = _modelFactory.CreateUnitOfWork())
{
    var animal = uow.Animals.GetById(2);
    var animalEventCount = animal.AnimalEvents.Count;
    uow.Animals.Delete(animal);
    uow.SaveChanges();
}

Если я использую этот код, то можно ожидать только одного удаления:

using (var uow = _modelFactory.CreateUnitOfWork())
{
    var animal = uow.Animals.GetById(2);
    uow.Animals.Delete(animal);
    uow.SaveChanges();
}

0 ответов

Другие вопросы по тегам