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

前端 未结 5 1932
梦毁少年i
梦毁少年i 2020-12-03 01:02

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 l

相关标签:
5条回答
  • 2020-12-03 01:19

    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.

    0 讨论(0)
  • 2020-12-03 01:20

    Now the answer is Yes:

    AddColumn("[table name]", 
              "[column name]", 
              c => c.Boolean(nullable: false, defaultValue: false));
    
    0 讨论(0)
  • 2020-12-03 01:26

    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

    0 讨论(0)
  • 2020-12-03 01:33

    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; }
        }
    }
    
    0 讨论(0)
  • 2020-12-03 01:40

    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;
    }
    
    0 讨论(0)
提交回复
热议问题