实体框架不级联删除

时间:2019-02-11 16:41:49

标签: c# entity-framework-6 devart

简而言之,EF默认是删除级联。我有一个使用Devart的Entity Developer设置的父/子关系。设置为删除级联。父表如下所示:

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浏览器并执行以下SQL,那么父级和子级都会被正确删除,因此我知道它不是SQLite。

DELETE FROM Tools WHERE Tools.ToolID = 6;

我一直在寻找以下内容,以确保级联删除不会被覆盖:

OnModelCreating(false)

它在Entity Developer创建的代码中不存在。

是什么原因导致EF无法级联删除?

1 个答案:

答案 0 :(得分:0)

请添加“外键约束=打开;”您的连接字符串以解决此问题。请参阅https://www.devart.com/dotconnect/sqlite/docs/?Devart.Data.SQLite~Devart.Data.SQLite.SQLiteConnection~ConnectionString.html