web-dev-qa-db-ja.com

コードファースト移行:新しいプロパティのデフォルト値を設定する方法は?

reportクラスのインスタンスをデータベースに格納するためにEF6を使用しています。データベースにはすでにデータが含まれています。 reportにプロパティを追加したい場合、

public class report {
    // ... some previous properties

    // ... new property:
    public string newProperty{ get; set; }
}

パッケージマネージャーコンソールに移動して実行すると

add-migration Report-added-newProperty
update-database

'/ Migrations'フォルダーにあるファイルを取得して、テーブルにnewProperty列を追加します。これは正常に機能します。ただし、データベース内の古いエントリでは、newPropertyの値は空の文字列になりました。しかし、たとえば「古い」ものにしたいのです。

だから私の質問は次のとおりです:移行スクリプト(または他の場所)で(任意のタイプの)新しいプロパティのデフォルト値を設定するにはどうすればよいですか?

35
EluciusFTW

生成された移行コードが表示される場合、AddColumnが表示されます

AddColumn("dbo.report", "newProperty", c => c.String(nullable: false));

defaultValueを追加できます

AddColumn("dbo.report", "newProperty", 
           c => c.String(nullable: false, defaultValue: "old"));

またはdefaultValueSqlを追加します

AddColumn("dbo.report", "newProperty",
           c => c.String(nullable: false, defaultValueSql: "GETDATE()"));
62
Hamid Pourjam

次のようにプロパティ/列を追加する移行スクリプトの行を変更する必要があります。

AddColumn("dbo.reports", "newProperty", c => c.String(nullable: false, defaultValue: "test"));
5
ngu

それが誰かを助けることを願っています。以前の回答からすべてをまとめる(ブールプロパティを使用した例)

1)エンティティに新しいプロパティを追加します。

/// <summary>
/// Determines if user is enabled or not. Default value is true
/// </summary>
public bool IsEnabled { get; set; }

2)以下のコマンドを実行して、移行に新しい変更を追加します。

add-migration addIsEnabledColumn

3)上記のコマンドから移行ファイルが作成され、そのファイルを開きます。

enter image description here

4)デフォルト値を設定します。

public override void Up()
    {
        AddColumn("dbo.AspNetUsers", "IsEnabled", c => c.Boolean(nullable: false, defaultValue: true));
    }
3
Victor LG