实体框架不级联删除

问题描述 投票:0回答:1

简而言之,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;

我已查找以下内容以确保Cascade删除未被覆盖:

OnModelCreating(false)

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

什么可能导致EF不级联删除?

c# entity-framework-6 devart
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.