使用している EF のバージョンによって異なります。移行を行っても、次のような結果が表示されます。
「列 Id をドロップ」および「列 TeamId を追加」。
これにより、すべての値と「子接続」が失われます......
この時点で私が目にしている唯一の「安全な」ソリューションは、移行と「手作業による SQL 操作」の組み合わせです。
簡単な解決策:
1- ID を使用してテーブルを作成する「基本」移行が既にあることを考慮して、「更新」を使用して新しい移行を作成します。まだ実行しないでください。
2- そのファイルを開き、生成された行の前に新しい行を書き込み、次のような SQL コマンドを使用します。
SQL("ALTER TABLE table_name RENAME COLUMN old_name to new_name;");
これにより、移行が列を削除して新しい列を作成する前に名前が変更されます。何が起こるか: 削除の前に名前を変更すると、削除が実行されますが、「失敗」しますが、何も害はありません。
しかし今、あなたは尋ねます:なぜ私はこれをするのですか?行を削除して列を削除して新しい列を作成しても、マイグレーションを使用している場合は、次に新しいマイグレーション ファイルを自動的に作成するときに、この新しい行が存在します...これが理由です。
更新された回答 #1
Entity Framework の移行について話すとき、私はこれを参照しています:
http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx
パッケージ マネージャー コンソールで「Add-Migration AddBlogUrl」コマンドを実行すると、新しいファイル (*.cs) が作成されます。
SQL コマンドを使用したこのファイル移行ファイルの例:
public partial class AddAbsencesTypesAndCategories : DbMigration
{
public override void Up()
{
CreateTable(
"pvw_AbsenceType",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(nullable: false),
CountAsVacation = c.Boolean(nullable: false),
IsIncremental = c.Boolean(nullable: false),
})
.PrimaryKey(t => t.Id);
.....
AddColumn("pvw_Absence", "CategoryId", c => c.Int(nullable: false));
AddForeignKey("pvw_Absence", "StatusId", "pvw_AbsenceStatusType", "Id");
AddForeignKey("pvw_Absence", "CategoryId", "pvw_AbsenceType", "Id");
CreateIndex("pvw_Absence", "StatusId");
CreateIndex("pvw_Absence", "CategoryId");
DropColumn("pvw_Absence", "MainCategoryId");
DropColumn("pvw_Absence", "SubCategoryId");
......
Sql(@"
SET IDENTITY_INSERT [dbo].[pvw_AbsenceStatusType] ON
INSERT pvw_AbsenceStatusType (Id, Name) VALUES (1, N'Entwurf')
SET IDENTITY_INSERT [dbo].[pvw_AbsenceStatusType] OFF
");
.....
}
public override void Down()
{
........
}