在处理 SqlExcpetion 时查找特定的 DbContext
Find specific DbContext, when handling a SqlExcpetion
我想创建一个异常过滤器:
public class BigTouchExceptionFilter : IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
var sqlException = filterContext.Exception as SqlException;
if (sqlException == null)
{
return;
}
//Todo: Handle when it is thrown by `BigTouchContext`
}
}
我有两个不同的 DbContext:MainContext:DbContext
和 BigTouchContext:DbContext
。我想在我的 ExceptionFilter 中检测错误是否由 BigTouchContext
(实际上是多个租户)抛出。
是否有可能以某种方式覆盖 DbContext
,它通过自定义异常传输上下文类型?
我真的找不到从相关异常中获取 DBContext 的方法,但我可以提出一个解决方法
在您的过滤器中捕捉 DbUpdateException。
现在在此异常中,您可以通过访问 DbUpdateException.Entries
属性
找到失败的实体
按照所述在过滤器中创建两个实体列表
var entityTypes = db.Model.GetEntityTypes().Select(t => t.ClrType).ToList();
- 获取第二步失败的第一个条目,并使用它公开的
GetType()
方法从两个列表中搜索类型。第一个得到它的是您选择的 DBContext。
我还没有尝试过,但我觉得它会奏效。
不幸的是,DBContext 抛出以下之一 Check MSDN here。 SQL exception
连接问题与 DBContext 无关,因此无法与之关联。
您也许可以通过服务器进行关联 SQL Exception get server name which could also be in the DBContext connection string
我想创建一个异常过滤器:
public class BigTouchExceptionFilter : IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
var sqlException = filterContext.Exception as SqlException;
if (sqlException == null)
{
return;
}
//Todo: Handle when it is thrown by `BigTouchContext`
}
}
我有两个不同的 DbContext:MainContext:DbContext
和 BigTouchContext:DbContext
。我想在我的 ExceptionFilter 中检测错误是否由 BigTouchContext
(实际上是多个租户)抛出。
是否有可能以某种方式覆盖 DbContext
,它通过自定义异常传输上下文类型?
我真的找不到从相关异常中获取 DBContext 的方法,但我可以提出一个解决方法
在您的过滤器中捕捉 DbUpdateException。
现在在此异常中,您可以通过访问
找到失败的实体DbUpdateException.Entries
属性按照所述在过滤器中创建两个实体列表
var entityTypes = db.Model.GetEntityTypes().Select(t => t.ClrType).ToList();
- 获取第二步失败的第一个条目,并使用它公开的
GetType()
方法从两个列表中搜索类型。第一个得到它的是您选择的 DBContext。
我还没有尝试过,但我觉得它会奏效。
不幸的是,DBContext 抛出以下之一 Check MSDN here。 SQL exception
连接问题与 DBContext 无关,因此无法与之关联。
您也许可以通过服务器进行关联 SQL Exception get server name which could also be in the DBContext connection string