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 コマンドレット Add-Migration / Update Database を使用すると、このアプローチは生成されたクラスをプロセスに導入します。次に、デフォルトを持つことができます。DBMigrations から派生するクラスを参照してください。http://msdn.microsoft.com/en-us/library/system.data.entity.migrations.dbmigration.addcolumn%28v=vs.103%29.aspxを参照してください 。列ビルダーのラムダ式を指定できます。これにより、デフォルトが許可されます。

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 に答える