перехват DbUpdateException не будет перехватывать DbUpdateConcurrencyException - PullRequest
0 голосов
/ 16 октября 2018

У меня есть 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?

edit:

my nlog config:

<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>

1 Ответ

0 голосов
/ 16 октября 2018

При использовании ведения журнала ядра ASP.NET все компоненты Microsoft могут записывать в ведение журнала ядра ASP.NET.Интеграция NLog (NLog.Web.AspNetCore) также получит эти журналы, и вы сможете записать их в файл и т. Д.

Так что, вероятно, компонент EF записал это исключение в журнал.Вы можете проверить это, используя ${stracktrace} или ${logger} в вашей конфигурации

...