我有主表和详细信息表。例如,主表为ObjectSet<'MasterObject>
,详细信息表为ObjectSet<'DetailObject>
。因此,每个MasterObject
都包含EntityCollection<'DetailObject>
。
据我所知,我可以使用以下命令从数据库中删除DetailObject
:
EntityCollection<'DetailObject> ec = masterObject.DetailObjects;
//作为导航属性ec.Remove(deleting_detail_object);
// deleted_detail_object将被删除并标记为删除。context.SaveChanges();
//我有例外 Remove()
后deleting_detail_object.MasterObject
(导航属性)为null
。这是正常的。但是context.SaveChanges()
给了我以下例外:
“操作失败:关系无法更改,因为 一个或多个外键属性是不可为空的。当一个 改变了关系,相关的外键属性是 设置为空值。如果外键不支持空值, 必须定义新的关系,外键属性必须是 分配了另一个非空值,或者不相关的对象必须是 删除。“
我可以使用DetailObject
删除此context.RemoveObject()
,但可以使用EntityCollection<>
进行删除吗?
答案 0 :(得分:0)
我不认为这个问题与EntityCollection有关,我认为你的数据库架构有问题。 如果主表具有不可为空的详细信息的FK,则无法删除详细信息表行,因为这会违反数据库模式。
更改它以使FK可以为null或重新设计数据库模式。
如果这是您需要支持的操作,也许您的详细信息表中应该有一个引用主表的FK。因此,您可以删除详细信息行。
如果这没有用,请提供一个脚本,说明如何创建数据库表。