为最小int值设置约束

我正在使用Repository模式。 我有一个名为Product的实体,我想设置价格的最小值以避免零价格。 是否可以在EntitytypeConfiguration类中创建它?

我的产品配置类

public class ProductConfiguration : EntityTypeConfiguration { public PlanProductConfiguration(string schema = "dbo") { ToTable(schema + ".Product"); HasKey(x => new { x.IdProduct }); Property(x => x.Price).HasColumnName("flt_price") .IsRequired() .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); } } 

对于服务器端validation,在您的实体上实现IValidatableObject。 对于客户端validation,如果您使用的是MVC,请将数据注释添加到视图模型中。 要添加数据库约束,请通过在迁移中调用Sql()方法来添加检查约束。

如果您需要该约束,则不能通过EF配置应用它,但您可以使用check直接在数据库中查看,或者您可以在模型上应用数据注释查看此SOpost

就像是:

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

但是,如果您使用的是视图模型,那将无济于事,因为这些validation仅应用于ASP.NET对象创建(通常在从Web请求创建实例到控制器时),因此在创建实例时不必遵守属性,因此如果您想要坚定地validation它,您需要应用自定义的getter和setter而不是自动属性,例如:

 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中就可以正常工作。

我建议使用Fluentvalidation ,而不是基于属性的validation:

  • 使用富有表现力的lambda表达式
  • 可以保存在除模型之外的其他组件中
  • 不会使用不相关的代码来调查POCO

我想你想要的是你房产的默认值。 Unfourtunaly EF目前不支持设置默认值 。 但是,作为问题的解决方案,您可以在Product类中创建一个构造函数,并将Price属性设置为您想要的最小值:

 public class Product { //... public Product { Price=1; //set your minimum price here } }