この質問は、SOのさまざまなフレーバーで何度も質問されています。私はすべての答えを調べ、多くの時間を費やしました。私はこれを機能させることができないようです。
私はasp.net mvc Entity Framework、SQLサーバーアプリに取り組んでいます。すでに既存のデータベース、テーブルなどがあり、すべてが機能しています。テーブルに新しい列を追加するだけです。
だから..モデルクラスにプロパティを追加して、テーブルに列を追加できるようにしました。しかし、成功していません。
したがって、次の順序で手順を実行します。
モデルクラスにフィールドを追加します。
[Required]
public string EmailSubject{ get; set; }
次に、パッケージマネージャーコンソールで、次のコマンドを正常に発行します。
Enable-Migrations -ContextTypeName AppointmentReminder.Data.ReminderDb -Force
次に、次のようにプロパティをtrueに設定します
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
次に、パッケージマネージャーコンソールで次のコマンドを発行します。
Update-Database -Verbose -Force
データベースへのデフォルト接続への接続文字列は次のようになります
Data Source=(LocalDb)\v11.0;AttachDbFilename=C:\practice\AppointmentReminder4\AppointmentReminder4\App_Data\aspnet-AppointmentReminder4-20141202060615.mdf;Initial Catalog=aspnet-AppointmentReminder4-20141202060615;Integrated Security=True
しかし、目的のテーブルに新しい列を追加することはできません。
編集1
必須属性を使用せずにモデルを次のように更新し、上記のすべての手順を実行しましたが、テーブルに列を追加できませんでした。
public string EmailBody { get; set; }
すべてのコマンドとその出力は次のとおりです。
PM> Enable-Migrations -ContextTypeName AppointmentReminder.Data.ReminderDb -Force
Checking if the context targets an existing database...
Code First Migrations enabled for project AppointmentReminder4.
PM> Update-Database -Verbose -Force
Using StartUp project 'AppointmentReminder4'.
Using NuGet project 'AppointmentReminder4'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'aspnet-AppointmentReminder4-20141202060615' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration).
No pending explicit migrations.
Running Seed method.
PM> Update-Database -Verbose -Force
Using StartUp project 'AppointmentReminder4'.
Using NuGet project 'AppointmentReminder4'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'aspnet-AppointmentReminder4-20141202060615' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration).
No pending explicit migrations.
Running Seed method.
PM>
編集2 最終的にこの問題を解決しました。上記の手順はすべて正しかった。 ReminderDb(EFオブジェクト)に実際に関連付けられている実際のデータクラスではなく、モデルクラスを編集していた場合を除きます。プロパティで正しいクラスを更新した後、すべてが正常に機能しました。助けてくれたすべての人に感謝します!
フィールドは必須なので、デフォルト値を指定する必要があります。移行ファイルを編集し、列を追加する行を見つけて、デフォルト値を指定します。
public override void Up()
{
AddColumn("dbo.MyTable", "EmailSubject", c => c.String(nullable: false, defaultValue: ""));
}
参考: Entity Framework移行の必須フィールドのデフォルト値?
編集:編集に基づいて、更新を試みる前に移行を作成する必要があります。通常の使用方法については、 この例 を参照してください。
ただし、既存のデータベースにCode First Migrationsを適用する場合は、この記事が役立つ場合があります。 既存のデータベースを使用したCode First Migrations
新しい列を必須属性で装飾しました。そのテーブルにすでにいくつかの行がある場合、それらの行はその列を持つことができません。削除する必要があります。移行よりも、すべての行にデータを入力します。プロパティを必須にして、再度移行します。