18

プロパティの名前を変更する場合、Visual Studio IDEは、コード全体でそのプロパティの名前を変更するためにリファクタリングするのに役立つほど賢いです。その名前変更がEF移行で使用されるモデルにあり、次のような標準の自動移行を実行する場合:

update-database -f

あなたはこれを得るでしょう:

AddColumn("NewName"...
DropColumn("OldName"...

あなたが望んでいたものではありません。明らかに、この時点でAdd-Migrationを実行すると、これら2つの呼び出しを手動でRenameColumnへの1つの呼び出しに変更できますが、自動移行でこれを自動的に行う方法はありますか?プロパティの名前を変更するためのいくつかのアプローチは、私が正しく行っていないのではないでしょうか?

VS2012でEF5.0を使用していますが、この動作はEF4.3.1およびVS2010でも発生します。

4

2 に答える 2

23

移行では、プロパティと列の名前の変更を自動的に検出することはできません。スキャフォールド移行には、名前の変更に変更する必要があるドロップ/作成が含まれます。

列の名前を変更するだけで([Column]アノテーションをプロパティに追加することで)、列がマップされているプロパティの名前と一致するため、名前変更として検出できます。

Add-Migrationコマンドに–Renamesスイッチを追加することを検討しましたが、最終的に、生成されたコードの編集は、コマンドラインで名前変更を提供するための構文を作成するよりも簡単であると判断しました。

〜ローワン

于 2012-09-11T19:36:05.543 に答える
5

私の意見:EFは、あなたが既存の列の名前を変更したことを知りません。リファクタリングは、変更に関する永続的な情報がない設計時の変更であるため、移行を実行するとき、EFは、名前の変更と新しい列の実際の削除/追加を区別する方法を知らないだけです。

于 2012-09-10T19:37:43.647 に答える