1

我有一个具有以下形式的引用约束的实体:Entity->Others,并且正在尝试删除有问题的实体。

加载实体后删除,然后保存回来,这工作正常。

Entity entity = null;
entity = db.Entities.Where(o => o.Id == loadId).FirstOrDefault();

db.Entities.DeleteObject(entity);
db.SaveChanges();

通过引用约束向其他类型的实体添加单个检查会导致在保存时引发异常

Entity entity = null;
entity = db.Entities.Where(o => o.Id == loadId).FirstOrDefault();

entity.Others.Count();

db.Entities.DeleteObject(entity);
db.SaveChanges();

除了:

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

我并没有期望太多,因为我在这里没有完整且最少的代码,但是关于如何简单地访问其他人使实体无效以进行保存的最模糊的建议将不胜感激。

4

1 回答 1

0

看起来你的映射有一些错误。要么您首先使用数据库,并且您的数据库允许级联删除EntityOrder但您的 EDMX 模型不允许,或者您的数据库允许Orders不存在Entity(可为空的 FK)但您的类不存在。

在第一种情况下,选择 EDMX 中的关联并修改其属性以支持OnDelete正确的方向。在后一种情况下,确保 和 之间的基数EntityOrder0..1-N 而不是 1-N。如果您暴露了 FK,请Order确保它可以为空。

如果没有级联删除或可为空的 FK,您的第一个示例应该会抛出错误(除非您在数据库中关闭了您永远不应该做的约束验证)。在这种情况下,您必须先删除所有从属实体 ( Orders),然后才能删除主体 ( Entity)。

于 2012-10-03T08:45:36.223 回答