为什么个别删除级联删除调用?

时间:2016-09-21 10:44:32

标签: mysql entity-framework entity-framework-6 devart

我有两个表有1:n的关系(一个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 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 。 这是由数据库完成的事情,每当我删除动物时由cascade子句删除触发。 正确吗

但是在sql跟踪中,我看到许多单独的删除命令。 为什么实体框架/ devart这样做?

animal_events

这不是多余的,因为数据库会处理<Association Name="animal_events_ibfk_2"> <End Role="animals" Type="Model.Store.animals" Multiplicity="0..1"> <OnDelete Action="Cascade" /> </End> 或者它只是我的EF设置/配置中的错误吗?

更新

提取edml文件

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();
}

如果我使用此代码,则只有一次删除

SQLSafe

0 个答案:

没有答案