Rod*_*gão 7 c# entity-framework ef-code-first ef-fluent-api
我正在使用存储库模式。我有一个名为 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);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
如果你想要这个约束,你不能通过 EF 配置应用它,但你可以直接在数据库上使用checksee here应用它,或者你可以在模型上应用数据注释,参见这个SO 帖子
就像是:
[Range(0M, Double.MaxValue)]
public double Price { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用的是视图模型,那不会有什么不同,因为这些验证仅应用于 ASP.NET 对象创建(通常在从 Web 请求到控制器创建实例时),因此当您创建实例时不必遵守属性,所以如果你想坚定地验证它,你需要应用一个自定义的 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
只要数据库中没有无效数据,这将在 EF 中正常工作。
对于服务器端验证,请在您的实体上实现 IValidatableObject。对于客户端验证,如果您使用 MVC,请将数据注释添加到视图模型中。要添加数据库约束,请通过在迁移中调用 Sql() 方法来添加检查约束。
| 归档时间: |
|
| 查看次数: |
14261 次 |
| 最近记录: |