【发布时间】:2019-02-21 01:03:44
【问题描述】:
简而言之,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 不能级联删除?
【问题讨论】:
-
When I use the following to delete the parent the child is left hanging:-child is left hanging在这里是什么意思?它是否只删除了保持孩子完好无损的父母?正确解释删除父级时的场景。 -
你能告诉我们一些关于你的模型绑定的代码吗?
-
@TanvilArjel - 父级被删除,表中的子级没有父级。
-
@noobed - 我很乐意。代码由Entity Developer自动生成,大约500行,这么多代码怎么发?
-
@noobed - 这是一个过去的垃圾箱。 pastebin.com/q080bYrs
标签: c# entity-framework-6 devart