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
の値は空の文字列になりました。しかし、たとえば「古い」ものにしたいのです。
だから私の質問は次のとおりです:移行スクリプト(または他の場所)で(任意のタイプの)新しいプロパティのデフォルト値を設定するにはどうすればよいですか?
生成された移行コードが表示される場合、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()"));
次のようにプロパティ/列を追加する移行スクリプトの行を変更する必要があります。
AddColumn("dbo.reports", "newProperty", c => c.String(nullable: false, defaultValue: "test"));
それが誰かを助けることを願っています。以前の回答からすべてをまとめる(ブールプロパティを使用した例):
1)エンティティに新しいプロパティを追加します。
/// <summary>
/// Determines if user is enabled or not. Default value is true
/// </summary>
public bool IsEnabled { get; set; }
2)以下のコマンドを実行して、移行に新しい変更を追加します。
add-migration addIsEnabledColumn
3)上記のコマンドから移行ファイルが作成され、そのファイルを開きます。
4)デフォルト値を設定します。
public override void Up()
{
AddColumn("dbo.AspNetUsers", "IsEnabled", c => c.Boolean(nullable: false, defaultValue: true));
}