[解決済み】DbEntityValidationException - エラーの原因を簡単に知るにはどうすればよいですか?
質問
Entity Frameworkを使用したプロジェクトがあります。を呼び出しながら
SaveChanges
の上で
DbContext
を実行すると、次のような例外が発生します。
System.Data.Entity.Validation.DbEntityValidationException: バリデーション が 1 つまたは複数のエンティティで失敗しました。EntityValidationErrors' プロパティを参照してください。 を参照してください。
これはこれでいいのですが、この例外が発生するたびにデバッガーを添付するのは嫌です。さらに言えば、本番環境ではデバッガを簡単に導入できないので、わざわざこのエラーを再現する必要があります。
の中に隠された詳細を見るにはどうすればよいのでしょうか?
DbEntityValidationException
?
解決方法は?
最も簡単な解決策は
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/
関連
-
[解決済み】C#で四捨五入する方法
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] C#の[Flags]Enum属性の意味とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み】WebResource.axdとは何ですか?