Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Entity Framework Migrations don't include DefaultValue data annotation (EF5RC)

I have a class that looks like this:

[Table("Subscribers", Schema = "gligoran")]
public class Subscriber
{
    [Key]
    public string Email { get; set; }

    [Required]
    [DefaultValue(true)]
    public bool Enabled { get; set; }
}

When creating a migration to include this class I get:

public partial class AddSubscriberClass : DbMigration
{
    public override void Up()
    {
        CreateTable(
            "gligoran.Subscribers",
            c => new
                {
                    Email = c.String(nullable: false, maxLength: 128),
                    Enabled = c.Boolean(nullable: false),
                })
            .PrimaryKey(t => t.Email);

    }

    public override void Down()
    {
        DropTable("gligoran.Subscribers");
    }
}

I'd like the Enabled line to look like this:

Enabled = c.Boolean(nullable: false, defaultValue: true),

Of course I can do this myself, but I'm just asking if there's a way to make Entity Framework do it automatically.

I'm using the latest Entity Framework 5 RC (5.0.0-rc.net40).

like image 664
gligoran Avatar asked Jul 18 '12 16:07

gligoran


2 Answers

As an Extra to Ladislav's Comment. Which is correct. you cant do it in the model. IF you wanted to use code based migrations. Ie using PM commandlet Add-Migration / Update Database, then this approach introduces a generated class into the process. Then you can have defaults . See the classes that Derive from DBMigrations. see http://msdn.microsoft.com/en-us/library/system.data.entity.migrations.dbmigration.addcolumn%28v=vs.103%29.aspx You can specific Column builder Lamda expressions. This allows defaults.

namespace MigrationsDemo.Migrations
{
  using System;
  using System.Data.Entity.Migrations;

public partial class SomeClassThatisATable : DbMigration
{
    public override void Up()
    {
        AddColumn("MyTable", "MyColumn", c => c.String( defaultvalue:"Mydefault"  ));
    }
like image 54
phil soady Avatar answered Oct 19 '22 17:10

phil soady


EF doesn't use DefaultValue attribute at all = it is not part of the model so migrations don't see it. You can propose support of this annotation on Data UserVoice.

like image 35
Ladislav Mrnka Avatar answered Oct 19 '22 16:10

Ladislav Mrnka