最も簡単な解決策は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/