Entity Framework 4.3CodeFirstを手動移行とSQLExpress2008で使用してプロジェクトを開始し、最近EF5(VS 2010)に更新したところ、外部キー制約などを変更すると、移行コードに「dbo」が追加されることに気付きました。テーブル名の先頭に、したがってそれが構築する外部キー名は、既存の制約に対して正しくありません(そして一般的に今では奇妙な名前に見えます)。
EF 4.3の元の移行スクリプト(ForeignKey( "Products"、t => t.Product_Id)に注意):
CreateTable(
"Products",
c => new
{
Id = c.Int(nullable: false, identity: true),
ProductName = c.String(),
})
.PrimaryKey(t => t.Id);
CreateTable(
"KitComponents",
c => new
{
Id = c.Int(nullable: false, identity: true),
Component_Id = c.Int(),
Product_Id = c.Int(),
})
.PrimaryKey(t => t.Id)
.ForeignKey("Products", t => t.Component_Id)
.ForeignKey("Products", t => t.Product_Id)
.Index(t => t.Component_Id)
.Index(t => t.Product_Id);
生成された外部キー名:FK_KitComponents_Products_Product_Id FK_KitComponents_Products_Component_Id
次にEF5にアップグレードして外部キーを変更すると、移行コードは次のようになります(「KitComponents」と「Products」だけではなく、 「dbo.KitComponents」と「dbo.Products」に注意してください)。
DropForeignKey("dbo.KitComponents", "Product_Id", "dbo.Products");
DropIndex("dbo.KitComponents", new[] { "Product_Id" });
そして、更新データベースは次のメッセージで失敗します:' FK_dbo.KitComponents_dbo.Products_Product_Id 'は制約ではありません。制約を削除できませんでした。以前のエラーを参照してください。
したがって、EF5の時点で、制約の命名がFK_KitComponents_Products_Product_IdからFK_dbo.KitComponents_dbo.Products_Product_Id(dbo。プレフィックス付き)に変更されたようです。
EF5をEF4.3の場合と同じように動作させて、吐き出す新しい移行コードをすべて変更する必要がないようにするにはどうすればよいですか?
これが変更された理由とその対処法に関するリリースノートを見つけることができませんでした:(