Entity Framework не каскадное удаление - PullRequest
0 голосов
/ 11 февраля 2019

Короче 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 не вызывает каскадное удаление?

1 Ответ

0 голосов
/ 20 февраля 2019

Пожалуйста, добавьте "Ограничения внешнего ключа = Вкл;"в строку подключения, чтобы исправить проблему.См. https://www.devart.com/dotconnect/sqlite/docs/?Devart.Data.SQLite~Devart.Data.SQLite.SQLiteConnection~ConnectionString.html.

...