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

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

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

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

enter image description here

这应该意味着我可以执行类似 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

那么我在这里缺少什么?为什么它错误地尝试删除关联而不是像您期望的那样简单地删除行?

最佳答案

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

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

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

这将产生必要的 DELETE 语句。有关使用 Telerik 数据访问管理导航属性的更多详细信息,请参阅 this documentation article .

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

关于c# - 删除所有一对多关联项 - Telerik OpenAccess ORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21554614/

相关文章:

sql-server - SET FMTONLY OFF 对具有动​​态查询的存储过程的影响

kendo-ui - Kendo 网格/数据源/分组

c# - FindViewById() 如何工作?

c# - 如何在 addParameter 中插入 asc/desc 以在 SQL 查询中进行排序

sql - 使用count优化SQL查询

sql server运行总计,条件为借方贷方余额

javascript - ASP.NET ImageButton onclick javascript 未触发

c# - 调用 IronPython 函数时 CodeContext 的相关性

c# - 从大文本文件中读取 unicode 字符

c# - SqlBulkCopy.WriteToServerAsync 不遵循 `await` 关键字。为什么?