Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

check constraint entity framework

IN EF can I add a check constraint so if my CustomerNotes entity has a boolean "FollowUpRequired" property I force user to enter a valid future date in the "FollowUpDate" property?

like image 229
CheGuevarasBeret Avatar asked Nov 05 '12 13:11

CheGuevarasBeret


2 Answers

EF does not support Check Constraints prior to EF Core 3.

That is, you cannot apply an attribute to an entity, and expect it to generate the appropriate SQL to create the Check constrint in the underlying database.

One way around this when using Code First Data Migrations (http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx) is to generate a migration and add an Sql() line in the Up() function override that is generated

e.g.

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

Also see this question and answer for some further information: Is it possible to express a check constraint?

like image 68
David Sette Avatar answered Sep 27 '22 19:09

David Sette


EF Core 3.0 supports entity.HasCheckConstraint() now.

To take Ryan's example:

protected override void OnModelCreating(ModelBuilder modelBuilder) {     modelBuilder.Entity<SomeTable>(entity =>         entity.HasCheckConstraint("CK_SomeTable_SomeColumn", "[SomeColumn] >= X"); } 
like image 26
DharmaTurtle Avatar answered Sep 27 '22 17:09

DharmaTurtle