SaveChanges
最も簡単な解決策は、エンティティ クラスをオーバーライドすることです。をキャッチし、実際のエラーをアンラップして、改善されたメッセージDbEntityValidationException
で新しいを作成できます。DbEntityValidationException
- SomethingSomething.Context.cs ファイルの横に部分クラスを作成します。
- この投稿の下部にあるコードを使用してください。
- それでおしまい。実装は、リファクタリング作業なしでオーバーライドされた SaveChanges を自動的に使用します。
例外メッセージは次のようになります。
System.Data.Entity.Validation.DbEntityValidationException: 1 つ以上のエンティティの検証に失敗しました。詳細については、「EntityValidationErrors」プロパティを参照してください。検証エラーは次のとおりです。フィールド PhoneNumber は、最大長が '12' の文字列または配列型でなければなりません。LastName フィールドは必須です。
から継承する任意のクラスでオーバーライドされた SaveChanges を削除できますDbContext
。
public partial class SomethingSomethingEntities
{
public override int SaveChanges()
{
try
{
return base.SaveChanges();
}
catch (DbEntityValidationException ex)
{
// Retrieve the error messages as a list of strings.
var errorMessages = ex.EntityValidationErrors
.SelectMany(x => x.ValidationErrors)
.Select(x => x.ErrorMessage);
// Join the list to a single string.
var fullErrorMessage = string.Join("; ", errorMessages);
// Combine the original exception message with the new one.
var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);
// Throw a new DbEntityValidationException with the improved exception message.
throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
}
}
}
には、検証エラーのDbEntityValidationException
原因となったエンティティも含まれています。したがって、さらに多くの情報が必要な場合は、上記のコードを変更して、これらのエンティティに関する情報を出力できます。
参照: http://devillers.nl/improving-dbentityvalidationexception/