0

考虑我有 2 个实体 - a) Publisher b) Book Publisher 具有称为 PublishedBooks 的导航属性,它是书籍的集合。假设 Publisher1 已经出版了 2 本书,即 Book1 和 Book2 我想做的是,对于 Publisher1,删除已出版的书 Book1 并在数据库中添加一本新出版的书(即 Book3)。

Context.SaveChanges() 抛出错误 -

操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

注意:删除级联规则存在于数据库和上下文类中。顺便说一句,我正在使用 C# & Sql Server 2005。

4

2 回答 2

0

听起来你正在做这样的事情:

Foo foo = entity.RelatedFoos.Where(f=>f.id=xyz);
entity.RelatedFoos.Remove(foo); //this is the problematic line
context.SaveChanges();

那是; 您正在从一组相关项目中删除一个实体 - 而不是从上下文本身的主集合中删除。如错误中所述,删除上述方式只会删除关系。不是对象foo。如果您要删除以下内容,这可能就是您的意思foo

Foo foo = entity.RelatedFoos.Where(f=>f.id=xyz);
context.Foos.Remove(foo);
context.SaveChanges();
于 2012-06-05T12:38:07.263 回答
0

您需要在保存之前显式删除子对象,例如

Context.DeleteObject(Book1);
Context.SaveChanges();
于 2012-06-05T12:42:01.273 回答