我想在删除实体时捕获外键异常。但是EF仅引发自定义异常。我需要检查是否存在外键冲突,而无需通过EF“手动”检查所有关系。
try
{
applicationDbContext.SaveChanges();
// even though debugger shows an SqlException at first, it doesnt get caught but an DBUpdateException is thrown...
return RedirectToAction("Index");
}
catch (System.Data.SqlClient.SqlException ex)
{
if (ex.Errors.Count > 0)
{
switch (ex.Errors[0].Number)
{
case 547: // Foreign Key violation
ModelState.AddModelError("CodeInUse", "Country code could not be deleted, because it is in use");
return View(viewModel.First());
default:
throw;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我在域模型中使用基于Jimmy Bogard 的这篇文章的枚举类。但是,EF 将类视为实体并希望定义一个键。
有没有办法让 EF 存储枚举类中的值,就像使用标准 C# 枚举一样?
这就是我目前实现枚举类的方式:
public class ReservationStatus : Enumeration
{
public static readonly ReservationStatus Outstanding = new ReservationStatus(0, "Oustanding");
public static readonly ReservationStatus Paid = new ReservationStatus(1, "Paid");
public static readonly ReservationStatus Canceled = new ReservationStatus(2, "Canceled");
public static readonly ReservationStatus Rejected = new ReservationStatus(3, "Rejected");
private ReservationStatus() { }
private ReservationStatus(int value, string displayName) : base(value, displayName) { }
}
public class Reservation : Entity<int>
{
public ReservationStatus Status { get; …Run Code Online (Sandbox Code Playgroud)