Search code examples
c#.netentity-frameworkef-code-first

How to set a default value on a Boolean in a Code First model?


I have an existing table / model into which I want to add a new Boolean column. This table already has many hundreds of rows of data, and I can't touch the existing data. But.. This column will NOT be nullable, so I need to provide a default value of true to all the rows that currently exist.

public class Revision
{
    ...
    public Boolean IsReleased { get; set; }
    ....
}

IMPORTANT:

(This was in the OP, but people seemed to miss is.)

When databases are updated with the migration, all existing rows which receive this new column MUST have their values set to True.


Solution

  • Another option is create a default constructor and set the properties with the default values you need:

    public class Revision
    {
        public Boolean IsReleased { get; set; }
    
        public Revision()
        {
            IsReleased=true;
    
        }
    }
    

    To set the values to true of the existing rows when you run Update-Database command, you could do this in your Configuration class:

    protected override void Seed(YourContext context)
    {
        var entities=context.Revisions.Where(r=>!r.IsReleased)
        foreach(var e in entities)
        {
          e.IsReleased=true;
         //context.Entry(e).State = EntityState.Modified; If you have disabled change tracking then add this line
        }
        context.SaveChanges();
    }
    

    Update

    If it is a new column you are adding via migration maybe you can also do this:

    AddColumn("dbo.Revisions", "IsReleased", c => c.Boolean(nullable: false, defaultValue: true));