使用EntityCollection.Remove()从DB中删除项目

时间:2013-05-07 12:25:57

标签: c# entity-framework

我有主表和详细信息表。例如,主表为ObjectSet<'MasterObject>,详细信息表为ObjectSet<'DetailObject>。因此,每个MasterObject都包含EntityCollection<'DetailObject>。 据我所知,我可以使用以下命令从数据库中删除DetailObject

  1. EntityCollection<'DetailObject> ec = masterObject.DetailObjects; //作为导航属性
  2. ec.Remove(deleting_detail_object); // deleted_detail_object将被删除并标记为删除。
  3. context.SaveChanges(); //我有例外
  4. Remove()deleting_detail_object.MasterObject(导航属性)为null。这是正常的。但是context.SaveChanges()给了我以下例外:

      

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

    我可以使用DetailObject删除此context.RemoveObject(),但可以使用EntityCollection<>进行删除吗?

1 个答案:

答案 0 :(得分:0)

我不认为这个问题与EntityCollection有关,我认为你的数据库架构有问题。 如果主表具有不可为空的详细信息的FK,则无法删除详细信息表行,因为这会违反数据库模式。

更改它以使FK可以为null或重新设计数据库模式。

如果这是您需要支持的操作,也许您的详细信息表中应该有一个引用主表的FK。因此,您可以删除详细信息行。

如果这没有用,请提供一个脚本,说明如何创建数据库表。