Is it possible to add CHECK constraint with fluent API in EF7?

前端 未结 3 603
温柔的废话
温柔的废话 2020-12-19 00:18

Is it possible to add CHECK constraint with fluent API in Entity Framework 7?

I need to acheive something like this:

...
ADD CONSTRAINT CK_SomeTable_         


        
相关标签:
3条回答
  • 2020-12-19 00:54

    Lukas Kabrt is still valid in 2019 so I had to create a special migration that I will include constraint and its drop:

            protected override void Up(MigrationBuilder migrationBuilder)
            {
                migrationBuilder.Sql(@"
    alter table AdminObjectReview add CONSTRAINT CK_AdminObjectReview_OnlyOneType CHECK 
    ( 
          (CASE WHEN AnswerId IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN QuestionId IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN CommentId IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN UserId IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN TagId IS NULL THEN 0 ELSE 1 END)
         = 1 )
    ");
            }
    
            protected override void Down(MigrationBuilder migrationBuilder)
            {
                migrationBuilder.Sql("alter table AdminObjectReview  drop CONSTRAINT CK_AdminObjectReview_OnlyOneType");
            }
    
    0 讨论(0)
  • 2020-12-19 00:57

    As of EF 7.0.0-rc1, it isn't possible with the fluent API.

    You can define the constraint manually in the migration

    migrationBuilder.Sql("ALTER TABLE SomeTable ADD CONSTRAINT CK_SomeTable_SomeColumn CHECK (SomeColumn >= X);");
    
    0 讨论(0)
  • 2020-12-19 01:06

    As of EF Core 3.0, you can use

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<SomeTable>(entity =>
            entity.HasCheckConstraint("CK_SomeTable_SomeColumn", "[SomeColumn] >= X");
    }
    
    0 讨论(0)
提交回复
热议问题