当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《使用EntityFramework和System.Data.SQLite进行级联删除的问题》经验,为你挑选了2个好方法。

我有一个设置的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
)

Omar.. 25

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

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



1> Omar..:

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

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



2> Keith G..:

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

但是,当我创建一个具有相同精确表的全新模型时,它采用了级联规则。因此,我的解决方案是删除旧模型并创建一个具有相同名称的新模型,依此类推。

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

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有