7

リポジトリ パターンを使用しています。Product というエンティティがあり、ゼロ価格を回避するために価格の最小値を設定したいと考えています。EntitytypeConfiguration クラスで作成することは可能ですか?

私の製品構成クラス

 public class ProductConfiguration : EntityTypeConfiguration<Product>
 {
    public PlanProductConfiguration(string schema = "dbo")
    {
        ToTable(schema + ".Product");
        HasKey(x => new { x.IdProduct });

        Property(x => x.Price).HasColumnName("flt_price")
                              .IsRequired()
                              .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
   }
}
4

4 に答える 4

7

その制約が必要な場合は、EF 構成を介して適用することはできませんが、checksee hereを使用してデータベースに直接適用するか、モデルにデータ注釈を適用することができます。このSO 投稿を参照してください。

何かのようなもの:

[Range(0M, Double.MaxValue)]
public double Price { get; set; }

ただし、ビュー モデルを使用している場合は違いはありません。これらの検証は ASP.NET オブジェクトの作成 (通常は Web 要求からコントローラーへのインスタンスの作成時) にのみ適用されるため、インスタンスを作成するとき、属性に従う必要はないため、しっかりと検証したい場合は、次のような自動プロパティではなく、カスタムのゲッターとセッターを適用する必要があります。

public class Product
{
    private double _price;

    [Range(0M, Double.MaxValue)]
    public double Price {
        get {
           return _price;
        }
        set {
            if (value <= 0M) {
                throw new ArgumentOutOfRangeException("value",
                        "The value must be greater than 0.0");
            }
            _price = value;
        }
    }
}

データベースに無効なデータがない限り、これは EF で正常に機能します。

于 2015-02-21T20:09:44.080 に答える
3

属性ベースの検証ではなく、Fluent Validationを使用することをお勧めします。

  • 表現力豊かなラムダ式を使用
  • モデル以外のアセンブリに保持できます
  • 関係のないコードで POCO をポリュートしません
于 2015-02-22T22:31:42.600 に答える