首页 > 解决方案 > EF Core Data 注释必须大于其他字段

问题描述

这是生成表格的模型类。

 public class Mission
{
    [Key]
    public string Id { get; set; }
    [Range(minimum: 1, maximum: int.MaxValue)]
    public int MinDayRate { get; set; }
    [Range(minimum: 1, maximum: int.MaxValue)]
    public int MaxDayRate { get; set; }
}

在 SQL Server 中它是: ALTER TABLE Mission ADD CONSTRAINT CK_MaxDayRate_vs_MinDayRate CHECK (MinDayRate <= MaxDayRate );

如何创建数据注释 MaxDayRate 必须大于 MinDayRate ,这将像我的 sql server 示例一样创建约束?

标签: asp.net-coreentity-framework-coreef-code-firstdata-annotations

解决方案


有一个数据注释[Compare]。但是,[Compare]检查两个属性是否相等,而不是一个大于另一个。确实存在EFCore.CheckConstraints,它将各种 .NET 验证属性应用为数据库检查约束。

更好的方法是使用 OnModelCreating 中的确切 SQL 定义任何检查约束:

modelBuilder.Entity<MyModel>()
    .HasCheckConstraint("CK_Properties_MinDayRate_MaxDayRate", "[MaxDayRate] > [MinDayRate]");

推荐阅读