检查约束实体框架

问题描述 投票:0回答:2

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

entity-framework entity
2个回答
40
投票

EF Core 3

以 Ryan 的为例

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<SomeTable>(entity =>
        entity.HasCheckConstraint("CK_SomeTable_SomeColumn", "[SomeColumn] >= X");
}

文档


EF Core 7+

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder
        .Entity<Blog>()
        .ToTable(b => b.HasCheckConstraint("CK_Blog_TooFewBits", "Id > 1023"));
}

请参阅 EF Core 重大更改文档,了解 7 中的更多详细信息和更改。文档


27
投票

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'");**
}

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

© www.soinside.com 2019 - 2024. All rights reserved.