Я начал проект с использованием Entity Framework 4.3 Code First с ручными миграциями и SQL Express 2008 и недавно был обновлен до EF5 (в VS 2010) и заметил, что теперь, когда я меняю что-то вроде ограничения внешнего ключа, код миграции добавляет "ДБО". к началу имени таблицы, и, следовательно, имя внешнего ключа, которое оно создает, неверно для существующих ограничений (и в общем теперь кажется странно названным).
Исходная миграция script в EF 4.3 (примечание ForeignKey ( "Продукты", 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" и "Продукты" ):
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, поэтому мне не нужно изменять каждый фрагмент нового кода миграции, который он выплевывает?
Я не смог найти никаких заметок о том, почему это изменилось и что с ним делать: (