我有两个表有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