2017-09-08 4 views
0

ユニーク制約の例外が発生した場合、.NETコアでUIにどのようにメッセージしますか。 MVC/RazorのアプローチではなくJSONを返したい.NETコアのUIにUNIQUE制約の例外を送信します。

+0

実際に何をしたいですか? sqlからエラーをログに記録しようとしていますか? sql文をtry-catchブロックに入れ、catchブロックの解析エラーをjsonに入れます。 – HEGDE

+0

だから、私のdBContextファイルの中でLINQ/FluentAPIを使用しています。私は:modelBuilder.Entityを持っています。() .HasAlternateKey(p => p.ProductName); –

+0

そして、私のコントローラファイルは以下を持っています: try { await _context.SaveChangesAsync(); }キャッチ(DbUpdateConcurrencyException) {}電位キャッチDbUpdateExceptionかもしれないが、UNIQUE contraintフィールドに書き込まれるの複製を防止するときにトリガーしない取得どちら。 –

答えて

0

私の記事Catching Bad Data in Entity Frameworkを見ていると思います。ここでは、SQLエラーをキャッチしてEFコアの検証エラーにする方法について説明します。質問であなたのフォローへの答えで

UPDATE

私は私が書いている本は、Entity Framework Core in Actionに関連するコードにあなたを指すことができます。ここでは、SaveChangesSqlCheckというメソッドを作成しました。このメソッドには、SQLエラーをチェックするコードが含まれています。 SaveChangesを呼び出す代わりにこのメソッドを使用すると、ValidationResultが返されます。

私の本はgit repositoryに関連しています。ここでは、私が本で示したすべてのことについて単体テストがあります。以下は、SaveChangesSqlCheckSaveChangesSqlCheckというコード自体の呼び出し方法を確認するための単体テストへのリンクです。

注:あなたは特別な方法でユニーク制約名をフォーマットする必要があります - 例についてはhttps://github.com/JonPSmith/EfCoreInAction/blob/Chapter10/Test/Chapter10Listings/EfCode/Configuration/MyUniqueConfig.csを参照してください。


あなたが記事に示すコードを使用する予定の場合は、すべてを行う必要がJSONにそれを回すためにJsonConvert.SerializeObject(errors)を使用しています。私はいくつかのコードを含んでいるので、json出力がどのように見えるかを見ることができます。

var error = new ValidationResult("error message"); 
var jsonList = JsonConvert.SerializeObject(error, 
    new JsonSerializerSettings { Formatting = Newtonsoft.Json.Formatting.Indented }); 

このJSON出力は、私はそれが役に立てば幸い

{ 
    "MemberNames": [], 
    "ErrorMessage": "error message" 
} 

だろう。

+0

ありがとう!それは素晴らしい作品です! –

関連する問題