使用实体框架 4.1,如何实现以下要求

本文关键字:实现 何实现 框架 实体 | 更新日期: 2023-09-27 18:36:15

考虑我有 2 个实体 - a) 发布者 b)书发布者具有称为"已发布书籍"的导航属性,该属性是书籍的集合。假设 Publisher1 出版了 2 本书,即 Book1 和 Book2我想做的是,对于出版商1,删除已出版的书籍Book1和在数据库中添加新的已出版书籍(即 Book3)。

Context.SaveChanges() 抛出下面的错误 -

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

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

使用实体框架 4.1,如何实现以下要求

听起来

你正在做这样的事情:

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();

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

Context.DeleteObject(Book1);
Context.SaveChanges();