考虑我有2个实体 - a)出版商b)书 Publisher具有名为PublishedBooks的导航属性,这是Books的集合。 假设Publisher1出版了2本书,即Book1&第二册 我想要做的是,对于Publisher1,删除已出版的书Book1和 在数据库中添加新出版的书籍(即Book3)。
Context.SaveChanges()抛出错误 -
操作失败:无法更改关系,因为 一个或多个外键属性是不可为空的。当一个 改变了关系,相关的外键属性是 设置为空值。如果外键不支持空值, 必须定义新的关系,外键属性必须是 分配了另一个非空值,或者不相关的对象必须是 删除。
注意:删除级联规则存在于数据库和上下文类中。 顺便说一句,我正在使用C#& Sql Server 2005。
答案 0 :(得分: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();
答案 1 :(得分:0)
您需要在保存之前显式删除子对象,例如
Context.DeleteObject(Book1);
Context.SaveChanges();