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

时间:2014-02-04 14:02:35

标签: c# sql-server telerik telerik-open-access

使用 Telerik OpenAccess ORM 我有2个对象UserInvestment。更具体地说,Investments包含User的外键,作为任何典型的一对多关系。换句话说,每个用户可以拥有多个投资,但每个投资只能有一个用户。

然后我尝试使用开放访问功能“管理”

enter image description here

这应该意味着我可以做User.Investments.Clear();这样的事情,它会删除所有相关的投资(或者至少在多对多关系中这样做)但不幸的是,当我尝试这个时,我受到了欢迎跟随错误。

  

"更新失败:Telerik.OpenAccess.RT.sql.SQLException:无法插入   列值为“UserID'”表中的值为NULL   ' CODECorp.dbo.Investment&#39 ;;列不允许空值。 UPDATE   失败"

显然,ORM尝试做的是从投资对象中删除关联(即外键)而不是删除它。我已经通过运行SQL事件探查器确认了这一点,并且可以看到它正在运行Update而不是Delete

那我在这里错过了什么?为什么它不正确地尝试删除关联而不是简单地删除行如您所期望的那样?

1 个答案:

答案 0 :(得分:4)

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

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

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

这将产生必要的DELETE语句。有关使用Telerik Data Access管理导航属性的更多详细信息,请参见this documentation article

我希望你觉得这很可行。我期待着您的反馈。