Короче EF по умолчанию это удалить каскад.У меня есть отношения между родителями и детьми, которые я установил с помощью Entity Developer от Devart.Установлено удаление каскада.Родительская таблица выглядит следующим образом:
CREATE TABLE `Tools` (
`ToolNumber` TEXT,
`ToolID` INTEGER PRIMARY KEY AUTOINCREMENT
);
Дочерняя таблица имеет следующее определение:
CREATE TABLE `FirstParts` (
`FirstPartID` INTEGER PRIMARY KEY AUTOINCREMENT,
`DateTime` TEXT,
`ToolID` INT32 NOT NULL,
CONSTRAINT `FK_FirstParts_Tools` FOREIGN KEY(`ToolID`) REFERENCES
`Tools`(`ToolID`) ON DELETE CASCADE
);
Я могу добавить записи в родительский / дочерний элемент, используя следующий код.Когда я использую это, я действительно получаю запись в каждой таблице, и ToolID установлен правильно.
using (var context = new Entities())
{
var query = from t in context.Tools
where t.ToolNumber == "Hello"
select t;
if (!query.Any())
{
var tool = new Tool()
{
ToolNumber = "Hello",
FirstParts = new System.Data.Entity.Core.Objects.DataClasses.EntityCollection<FirstPart>() { new FirstPart() { DateTime = "Same text" } }
};
context.AddToTools(tool);
context.SaveChanges();
}
}
Когда я использую следующее для удаления родителя, ребенок остается висеть:
using (var context = new Entities())
{
var query = (from t in context.Tools
select t).FirstOrDefault();
if (query != null)
{
context.Tools.DeleteObject(query);
context.SaveChanges();
}
}
Если я использую SQLite Browser и выполняю следующий SQL, то родитель и потомок удаляются должным образом, поэтому я знаю, что это не SQLite.
DELETE FROM Tools WHERE Tools.ToolID = 6;
Я искал следующее, чтобы убедиться, что Каскадное удаление неполучение переопределено:
OnModelCreating(false)
Его нет в коде, созданном Entity Developer.
Что может быть причиной того, что EF не вызывает каскадное удаление?