使用Entity Framework和System.Data.SQLite进行级联删除的问题

.net entity-framework sqlite sqlite3

我有一个设置的SQLite数据库,所以当我删除一个Person时,删除是级联的。当我手动删除一个Person(删除引用PersonID的所有记录)时,这很好。但是,当我使用Entity Framework删除Person时,我收到一个错误:

System.InvalidOperationException: The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.

我不明白为什么会这样。我的触发器设置为在删除被告知要删除的对象之前清理所有相关对象。

当我进入模型编辑器并检查关系的属性时,它显示OnDelete属性没有任何操作。为什么不通过从DB中提取它来正确设置?如果我将此值更改为Cascade,一切正常,但我宁愿不依赖于此手动更改,因为如果我从数据库刷新我的模型并且它会丢失它。

这是我的表的重用SQL。

CREATE TABLE [SomeTable] 
(
    [SomeTableID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    [PersonID] INTEGER NOT NULL REFERENCES [Person](PersonID) ON DELETE CASCADE
)
CREATE TABLE [Person]
(
    [PersonID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
)

一般承认的答案

我刚刚处理了这个问题。事实证明,当我使用EF Update model from database...选项时,它没有正确地获得删除的“级联”规则。

尝试转到EF数据库模型,单击导致问题的关联,然后确保将End1 OnDelete (可能是End2,取决于数据库方案)设置为Cascade


热门答案

我遇到了与SQL Server相同的问题。当我尝试从数据库更新模式时,它没有获取级联规则。请注意,在创建模型后添加了规则。我甚至尝试从模型中删除一个表并将其重新添加。这具有相同的效果 - 没有级联规则。

但是,当我创建一个具有相同精确表的全新模型时,它会选择级联规则。所以我的解决方案只是删除旧模型并创建一个具有相同名称的新模型等。

我想是数据库进程中的更新模型有问题。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因