26

在 EF 中,我可以添加一个检查约束,因此如果我的 CustomerNotes 实体具有布尔值“FollowUpRequired”属性,我会强制用户在“FollowUpDate”属性中输入有效的未来日期吗?

4

2 回答 2

23

EF 不支持 EF Core 3 之前的检查约束。

也就是说,您不能将属性应用于实体,并期望它生成适当的 SQL 以在底层数据库中创建 Check 约束。

使用 Code First 数据迁移 ( http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx )时的一种解决方法是生成迁移并在生成的函数覆盖中添加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'");**
}

另请参阅此问题和答案以获取更多信息: 是否可以表达检查约束?

于 2012-11-12T12:32:41.270 回答
20

EF Core 3.0entity.HasCheckConstraint() 现在支持.

以瑞安为例

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<SomeTable>(entity =>
        entity.HasCheckConstraint("CK_SomeTable_SomeColumn", "[SomeColumn] >= X");
}
于 2020-02-13T02:43:19.517 回答