13

我有一个看起来像这样的类:

[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),

当然我可以自己做,但我只是问是否有办法让 Entity Framework 自动做。

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

4

2 回答 2

11

EF 根本不使用DefaultValue属性 = 它不是模型的一部分,因此迁移看不到它。您可以在Data UserVoice上提议支持此注释。

于 2012-07-18T20:37:20.460 回答
7

作为拉迪斯拉夫评论的补充。哪个是对的。你不能在模型中做到这一点。如果您想使用基于代码的迁移。即使用PM commandlet Add-Migration / Update Database,然后这种方法将生成的类引入进程。然后你可以有默认值。请参阅派生自 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"  ));
    }
于 2012-12-19T13:15:44.607 回答