How can set a default value constraint with Entity Framework 6 Code First?
In a legacy app, most string properties can't be null and need to have a default value of string.empty.
I know it's possible to do this with migrations, but I'm looking for a way to do this using the fluent configuration interface:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Properties<string>().Configure(c =>
{
c.HasMaxLength(255);
if (!c.ClrPropertyInfo.IsDefined(typeof (NullableAttribute), false))
{
c.IsRequired();
// I want to set a default value (string.empty) here.
}
}
Is there any way to do this or I'm doomed to initialize all strings in the entity constructors?
Unfortunately the answer right now is 'No'.
But you can vote for Better support for default values
EDIT 30 Mar 2015: It's coming in EF7... Support database default values in Code First
EDIT 30 Jan 2017: General support for default database values is part of EF Core (the new name for EF7)... Default values
EDIT 17 Jan 2018: I'm not sure why people are commenting that EF7 is still a "pipe dream". EF7 (renamed EF Core) was released on 27th June 2016 and supports the setting of default values in Code First using the FluentAPI like this:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Rating)
.HasDefaultValue(3);
}
EF Core 2.0 was released on 14 August 2017
Now the answer is Yes:
AddColumn("[table name]",
"[column name]",
c => c.Boolean(nullable: false, defaultValue: false));
You can set the default value within the constructor
class Foo : Model
{
public bool DefaultBool { get; set; }
public Foo()
{
DefaultBool = true;
}
}
When you create a new Foo
it will set the true value for the property DefaultBool
. This is not a default constraint but it works.