我使用 Entity Framework 4.3 Code First 和手动迁移和 SQL Express 2008 开始了一个项目,最近更新到 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 并更改外键迁移代码看起来像(注意"dbo.KitComponents" 和 "dbo.Products"而不是"KitComponents" 和 "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 像在 EF 4.3 中一样运行,这样我就不必更改它吐出的每一段新迁移代码?
我还没有找到任何关于为什么会发生变化以及如何处理它的发行说明:(