How can set a default value constraint with Entity Framework 6 Code First?

佐手、 提交于 2019-12-17 10:47:38

问题


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?


回答1:


Now the answer is Yes:

AddColumn("[table name]", 
          "[column name]", 
          c => c.Boolean(nullable: false, defaultValue: false));



回答2:


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




回答3:


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.




回答4:


I found this example here

public class Person {
    private const int DEFAULT_AGE = 18;
    private int _age = DEFAULT_AGE;
    [DefaultValue(DEFAULT_AGE)]
    public int Age {
        get { return _age; }
        set { _age = value; }
    }
}



回答5:


I found that just using Auto-Property Initializer on entity property is enough to get the job done.

For example:

public class Thing {
    public bool IsBigThing{ get; set; } = false;
}


来源:https://stackoverflow.com/questions/20136504/how-can-set-a-default-value-constraint-with-entity-framework-6-code-first

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!