简而言之,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无法级联删除?
答案 0 :(得分:0)
请添加“外键约束=打开;”您的连接字符串以解决此问题。请参阅https://www.devart.com/dotconnect/sqlite/docs/?Devart.Data.SQLite~Devart.Data.SQLite.SQLiteConnection~ConnectionString.html。