4

エンティティ フレームワークで、データベースの小数列の精度を 10,2 に設定し、EDMX でそれを更新すると、小数点以下 2 桁に自動的に切り捨てられますよね?

データを適切に検証していないことを意味するため、黙って切り捨てるよりも、小数点以下の桁数が多い数値を指定した場合、例外を除いて顔に爆発することをお勧めします。

これを設定できる設定はありますか?それとも、savingchanges メソッドにアタッチして、反映する必要がありますか?

例で明確にするために:

Amount という列を持つ Invoice というテーブルがあるとします。私のデータベースでは、これは decimal(10,2) 列であり、これは EDMX に反映されています。私のエンティティによると、これは精度 10 でスケール 2 です。

次に、私のコードで、ユーザーが請求書を作成し、金額として 10.23456 を入力するとします。これに対して何らかのクライアント側の検証を追加するのを忘れていたため、金額がサーバーに送信され、コントローラーが請求書を保存します10.23456 の量。エンティティ フレームワークは、これを 10.23 に切り詰めて処理します。

私が欲しいのはこれです: 金額として 10.23456 の請求書を保存しようとすると、EF はエンティティが許可するよりも正確な値を取得したことを認識し、例外をスローします。したがって、このようにして、入力を適切に検証できなかったことがすぐに発見されます。

4

1 に答える 1

0

Entity Framework でこの構成を行うことはできません。ただし、クラスをオーバーライドしてプロパティに検証メタデータを追加すると、検証エラーが発生します。例えば

[RegularExpression(@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$",
                   ErrorMessage = "ERROR MESSAGE")]
public string Email { get; set; }

また

[StringLength(255, MinimumLength = 0, ErrorMessage = "ERROR MESSAGE")]
public string FriendlyName { get; set; }
于 2012-05-17T10:24:37.247 に答える