I am using the Repository pattern. I have a entity called Product and I want to set the minimum value for price to avoid zero prices. Is it possible to create it in a EntitytypeConfiguration class?
My product configuration class
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);
}
}
If you want that constraint, you can't apply it via EF configurations, but you can apply it using the check
see here on the database directly, or you can apply data annotations on the model see this SO post
Something like:
[Range(0M, Double.MaxValue)]
public double Price { get; set; }
However that won't make a difference if you are using a view model, as those validations are only applied on ASP.NET object creation(generally when creating an instance from a web request into a controller), so when you create an instance you don't have to obey the attributes, so if you want to firmly validate it you need to apply a custom getter and setter rather than auto-properties, something like:
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;
}
}
}
This will work fine in EF, so long as you don't have invalid data in the database.