我将db.SaveChangesAsync()
放在一个try catch块中,如下所示,但是查看日志,我看到了DbUpdateConcurrencyException
的日志,但是DbUpdateConcurrencyException
源自DbUpdateException
。
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException)
{
}
但是我注意到以下日志:
Microsoft.EntityFrameworkCore.Update| An exception occurred in the
database while saving changes for context type 'xxx.MyContext'.
Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: Database
operation expected to affect 1 row(s) but actually affected 0 row(s). Data
may have been modified or deleted since entities were loaded.
我不是通过捕获DbUpdateConcurrencyException
来捕获DbUpdateException
还是完全错过了异常的工作方式或nlog?
编辑:
我的nlog配置:
<targets>
<target xsi:type="File" name="all-log" layout="${longdate}|${logger}|${uppercase:${level}} ... />
<target xsi:type="File" name="own-log" ... />
</targets>
<rules>
<logger name="*" minlevel="Error" writeTo="all-log" />
<logger name="Microsoft.*" minlevel="Trace" finale="true" />
<logger name="*" minlevel="Trace" writeTo="own-log" />
</rules>
答案 0 :(得分:1)
当您使用ASP.NET Core日志记录时,Microsoft的所有组件都可以写入ASP.NET Core日志记录。 NLog(NLog.Web.AspNetCore)集成还将获取这些日志,因此您可以将其写入文件等。
因此,可能EF组件将该异常写入了日志记录。您可以在配置中使用${stracktrace}
或${logger}
进行检查