我在多对一关系中有两个实体。小部件(1)< - > (*)用户。
如果出于某些奇怪的原因,在数据库中删除了Widget,如果没有相应的Widget,可能没有外键或其他参考约束阻止用户存在,我不能使用EF来ObjectContext.DeleteObject()。消息是
System.Data.UpdateException: Entities in '<Users>' participate in the '<UsersWidgets>' relationship. 0 related 'Widgets' were found. 1 'Widget' is expected.
at System.Data.Mapping.Update.Internal.UpdateTranslator.RelationshipConstraintValidator.ValidateConstraints()
是否有推荐的方法在代码中处理此问题?
谢谢!
答案 0 :(得分:1)
您应修改您的实体数据模型(EDM)以符合数据库架构中表达的规则。
如果数据库中的用户和窗口小部件表之间没有任何参照完整性约束,并且用户中的外键列是可以为空,那么EDM中相应实体之间的关联应该具有 0..1:*(零或一对多)的多重性。
现在它可能设置为 1:*(一对多),这会导致验证错误,因为根据该用户始终是预期的只有一个关联的小部件。
相关资源:
答案 1 :(得分:0)
如果在用户到小部件上有FK,则通常会发生此异常,该小部件在数据库中不可为空。所以你要检查的第一件事是,如果FK被定义为用户可以为空。 你使用哪个数据库?我只知道MSSQL Server 2008.如果是这样,请检查在数据库中的关系上设置了哪些属性。您可以在关系上定义UPDATE和DELETE操作。如果您不希望在删除Widget时删除用户,则应检查是否禁用了级联删除。还有一个选项可以将用户的Widget设置为null。