删除所有一对多关联的项目 - Telerik OpenAccess ORM

3
使用Telerik OpenAccess ORM,我有两个对象User和Investment。更具体地说,Investments包含了对User的外键,就像任何典型的一对多关系一样。换句话说,每个用户可以拥有多个投资,但每个投资只能属于一个用户。
然后,我尝试利用开放式访问功能"Is Managed"。这意味着我可以做类似于User.Investments.Clear();的事情,并删除所有相关的投资(或者至少在多对多关系中有效),但不幸的是,当我尝试这样做时,会收到以下错误提示:
"Update failed: Telerik.OpenAccess.RT.sql.SQLException: Cannot insert the value NULL into column 'UserID', table 'CODECorp.dbo.Investment'; column does not allow nulls. UPDATE fails."
显然,ORM试图做的是从投资对象中删除关联(即外键),而不是删除它。我通过运行SQL分析器进行确认,并可以看到它正在运行Update而不是Delete。
那么,我在这里缺失了什么?为什么ORM尝试错误地删除关联而不是简单地删除行,正如您所期望的那样?
1个回答

4

按设计,当导航属性的IsManaged设为True时,在子对象从父对象集合中删除的情况下,行为是移除两个对象之间的关系。换句话说,Telerik Data Access(以前称为Telerik OpenAccess ORM)将保留数据库中的子记录,但会生成一条语句尝试将外键设置为NULL。

在这种情况下的解决方案是将集合传递给上下文的Delete方法。例如:

dbContext.Delete(User.Investments);
dbContext.SaveChanges();

这将生成必要的 DELETE 语句。有关使用 Telerik Data Access 管理导航属性的更多详细信息,请参阅此文档文章

我希望您觉得这是可行的。期待您的反馈。


我其实没有意识到可以将一个集合传递给删除命令。谢谢! - Maxim Gershkovich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接