22
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

EntityFramework SaveChange()時の例外発生時にSQLのエラーを表示させる

Last updated at Posted at 2016-08-08

EntityFramework、SaveChange()の例外発生時に、SQLのエラーを表示させる方法。

SQLExceptionが表示されなくて、どの部分でエラーが起きているか分からなくて困った…。
そんな時の備忘録。

EntityFramework側で検証が行われているらしい。
下記のコードで検証の内容を出力することができる。

try
{
    db.SaveChanges();
}
catch (System.Data.Entity.Validation.DbEntityValidationException ex)
{
    foreach (var errors in ex.EntityValidationErrors)
    {
        foreach (var error in errors.ValidationErrors)
        {
            // VisualStudioの出力に表示
            System.Diagnostics.Trace.WriteLine(error.ErrorMessage);    
        }
    }
    throw ex;
}

このコードでキャッチすると、
SaveChange()の例外発生時に、SQLExceptionのエラーメッセージが出力されます。

SaveChanges()時の検証の実行は DbContextConfiguration.ValidateOnSaveEnabled プロパティで制御できるみたい。デフォルトはtrue。(EntityFramework5)

falseにして、コードを動かしてみると
db.Configuration.ValidateOnSaveEnabled = false;

SQLExceptionを含んだ例外発生。

InnerExceptionのInnerExceptionにSQLExceptionが表示されます。
なかなか深い階層。Σ(゚Д゚)

EntityFrameworkの検証が無効になって、SQLが発行されているらしい。
db.Configuration.ValidateOnSaveEnabled = false;
にしておいた方が、デバッグの際やErrorログの出力に便利かも。

22
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?