How to set a default value on a Boolean in a Code First model?
You can avoid using fields and take advantage of Auto-property initialization, a feature new in C# 6.
This will set the default value to true
when the column is added to your database.
public class Revision
{
...
public Boolean IsReleased { get; set; } = true;
....
}
Edit to include @BrewMate's comment:
If all of your values set to false when you update the database, make sure to have the JSON formatter handle default values. The JSON formatter will ignore default values by default and then your database is setting the boolean to its default value,
false
. See the link below, I would try Default as the enumeration: http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_DefaultValueHandling.htm
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));