检查约束实体框架

Che*_*ret 14 entity entity-framework

在EF中我可以添加一个检查约束,这样如果我的CustomerNotes实体有一个布尔"FollowUpRequired"属性,我强制用户在"FollowUpDate"属性中输入一个有效的未来日期?

Dha*_*tle 20

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

以瑞安的例子为例

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

  • 或者可以通过迁移来完成: ```migrationBuilder.AddCheckConstraint( name: "CK_Name", table: "Table", sql: "([Column] &gt; 1)");``` (3认同)

Dav*_*tte 17

EF目前不支持Check约束.

也就是说,您不能将属性应用于实体,并期望它生成适当的SQL以在基础数据库中创建Check constrint.

使用Code First Data Migrations(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'");**
}
Run Code Online (Sandbox Code Playgroud)

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

  • 所以,这个答案现在实际上并不正确:) (2认同)