2012-07-18 51 views
12

我有一个类,看起来像这样:实体框架迁移不包括默认值数据注解(EF5RC)

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

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

当创建迁移到包括这个类,我得到:

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"); 
    } 
} 

我想了Enabled线看起来像这样:

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

我当然能做到这一点我自己,b我只是问是否有办法让Entity Framework自动执行。

我正在使用最新的Entity Framework 5 RC(5.0.0-rc.net40)。

回答

10

EF完全不使用DefaultValue属性=它不是模型的一部分,所以迁移不会看到它。您可以在Data UserVoice上建议支持此注释。

+0

我想手动是唯一的。尽管如此,感谢UserVoice链接。我对他们有几个想法。 – gligoran 2012-07-19 20:40:13

+2

其实MS今天发布了[EF作为开源](http://entityframework.codeplex.com/),所以你甚至可以自己试试;) – 2012-07-19 20:43:54

+0

不错!我前几天正在寻找它,并得出结论说它不是开放的。我喜欢新的(ish)微软开放政策。 – gligoran 2012-07-19 21:31:00

6

作为对拉迪斯拉夫评论的一个额外。哪个是对的。你不能在模型中做。如果你想使用基于代码的迁移。也就是说,使用PM命令行添加迁移/更新数据库,则此方法会将生成的类引入进程中。然后你可以有默认值。查看从DBMigrations派生的类。请参见http://msdn.microsoft.com/en-us/library/system.data.entity.migrations.dbmigration.addcolumn%28v=vs.103%29.aspx 您可以指定列生成器Lamda表达式。这允许默认值。

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" )); 
    }