使用Entity Framework 4.1,我如何达到以下要求?

时间:2012-06-05 12:13:01

标签: c# entity-framework

考虑我有2个实体 - a)出版商b)书 Publisher具有名为PublishedBooks的导航属性,这是Books的集合。 假设Publisher1出版了2本书,即Book1&第二册 我想要做的是,对于Publisher1,删除已出版的书Book1和 在数据库中添加新出版的书籍(即Book3)。

Context.SaveChanges()抛出错误 -

  

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

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

2 个答案:

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