【问题标题】:C# Winforms EF6 - multiple update exception handlingC# Winforms EF6 - 多次更新异常处理
【发布时间】:2015-12-25 04:59:27
【问题描述】:

C# Winforms、SQL Server、实体框架 6。

所以我有两张桌子,EmployeeBusinessGroupEmployeeBusinessGroup 中的外键。

作为测试的一部分,我尝试删除两名员工,然后致电SaveChanges()

当然,它会抛出一个DbUpdateException,我抓住并尝试处理它。

这是我的问题:似乎在第一次删除(尝试)发生后立即抛出异常。我想为我的用户做的是列出所有导致冲突的记录(在这种情况下是两条)。

我该怎么做?

谢谢。

【问题讨论】:

  • 您是在问如何编写 SQL 查询,还是在问如何在winforms 控件中显示信息?到目前为止,您尝试过什么?
  • 不,不是问如何编写 SQL 查询,只是指出底层 DB 是 SQL Server。到目前为止,我已经尝试捕获异常并对其进行解码,并且效果很好。问题是,当删除多条记录(通过我的应用程序)并且我执行SaveChanges() 时,我只得到第一个删除失败的条目,我想知道如何获取所有删除失败或删除失败的条目。
  • 您很可能必须编写一个像select * from BusinessGroup where EmployeeId in (...) 这样的选择语句,它会返回无法删除的员工。您可能还想考虑使用软删除,方法是添加一个 IsDeleted 列。

标签: c# sql-server winforms entity-framework-6


【解决方案1】:

您要删除的记录是否在另一个表上被引用/外来键控?在实际删除员工记录本身之前,您需要先删除这些员工的引用记录。

例如,表 A 是主表,在 表 B 中被引用。除非您首先删除 B 中由 A 中的记录引用的那些记录,否则您将无法删除 A 中的记录。

所以删除与A记录相关的B记录,然后删除A中的记录。

【讨论】:

  • 谢谢,但我明白问题出在哪里,我正在努力解决的是如何一次获取所有导致冲突的记录。
  • 您可以创建一个 linq 表达式来检查基表中的现有/引用记录。或者您可以创建一个存储过程来收集您想要获取的冲突记录,并使用 linq 调用它。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-21
  • 2018-03-20
相关资源
最近更新 更多