在 EF 中,我可以添加检查约束,以便如果我的 CustomerNotes 实体具有布尔值“FollowUpRequired”属性,我可以强制用户在“FollowUpDate”属性中输入有效的未来日期吗?
以 Ryan 的为例:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SomeTable>(entity =>
entity.HasCheckConstraint("CK_SomeTable_SomeColumn", "[SomeColumn] >= X");
}
文档。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<Blog>()
.ToTable(b => b.HasCheckConstraint("CK_Blog_TooFewBits", "Id > 1023"));
}
请参阅 EF Core 重大更改文档,了解 7 中的更多详细信息和更改。文档。
EF Core 3 之前的版本不支持检查约束。
也就是说,您不能将属性应用于实体,并期望它生成适当的 SQL 来在底层数据库中创建 Check 约束。
使用 Code First Data Migrations 时解决此问题的一种方法是生成迁移并在生成的
Sql()
函数重写中添加 Up()
行。
例如
public override void Up()
{
// Auto generated code here
// ...
// YOUR CUSTOM SQL GOES HERE
Sql("ALTER TABLE foo ADD CONSTRAINT CK_Some_Check CHECK (SomeDate > '20121110 00:00:00.000'");**
}
另请参阅此问题和答案以获取更多信息: 是否可以表达检查约束?