【发布时间】:2021-01-03 10:48:42
【问题描述】:
我在简单数据库表 (Products) 上有标准 MVC 控制器,并带有相应的 Model 和所有视图 (Index, Detail, Edit and Delete)。
如果记录没有外键约束,所有功能都可以正常工作。
我已经在我的 Controller 中修改了 DeleteConfirmed 类,因此我可以捕捉到当有人试图删除具有外键约束的记录时发生的 SqlException。
这是我现在在 Controller 中的 DeleteConfirmed 类:
// POST: Products/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
try
{
var products = await _context.Products.FindAsync(id);
_context.Products.Remove(products);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
catch (SqlException ex) when (ex.Number == 547)
{
return Content("Product cannot be deleted because...");
}
}
但它仍然抛出异常:
处理请求时发生未处理的异常。 SqlException:DELETE 语句与 REFERENCE 冲突 约束“FK_...”。冲突发生在 数据库“存储”,表“...”,列 '……'。声明已终止。
原始异常详细信息表明它确实是异常 547:
Microsoft.Data.SqlClient.SqlException (0x80131904):删除 语句与 REFERENCE 约束“...”冲突。冲突 发生在数据库“Store”、表“...”、列“..”中。该声明 已被终止。在 Microsoft.Data.SqlClient.SqlCommand.c.b__164_0(任务`1 结果)... ... 错误号:547,状态:0,类:16
我做错了什么?
【问题讨论】:
标签: c# asp.net-core entity-framework-core asp.net-core-mvc