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ログの出力に便利かも。