Мы недавно перешли с VS2015 на VS2017 для нашего приложения EF Code First. Некоторые разработчики в команде (но не все) получают разные результаты, вызывая Add-Migration на VS2015 и VS2017.
Например, если я генерирую миграцию на VS2015 без ожидаемых изменений модели и новой сборки, я получаю ожидаемую пустую миграцию
Add-Migration ... -Name ShouldBeAnEmptyMigration
дает мне:
namespace Blah.Foo.DataModel.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class ShouldBeAnEmptyMigration: DbMigration
{
public override void Up()
{
}
public override void Down()
{
}
}
}
Если я откатываю эти изменения и запускаю ту же команду для той же базы данных из VS2017, я получаю миграцию, полную нежелательных изменений:
namespace Blah.Foo.DataModel.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class ShouldBeAnEmptyMigration: DbMigration
{
public override void Up()
{
// For some reason EF is trying to add foreign key columns that
// already exist except with an additional suffix of "1".
// e.g. We already have an FK from 'Child' to 'Parent' using
// Guid Parent_Id which has been in place for (literally) years.
// There are 11 such columns it is trying to add here.
// Some date base a couple years, some are more recent.
// I don't see a pattern for which columns it is choosing
// 11 of these, one for each "new" column ...
DropForeignKey("Child", "Parent_Id", "Parent");
...
// 11 of these ...
DropIndex("Child", new[] { "Parent_Id" });
...
// 11 of these ...
AddColumn("Child", "Parent_Id1", c => c.Guid(nullable: false));
...
// 11 of these ...
CreateIndex("Child", "Parent_Id1");
...
// 11 of these ...
AddForeignKey("Child", "Parent_Id1", "Parent", "Id");
...
}
public override void Down()
{
// similar set of DropForeignKey, DropIndex, DropColumn,
// CreateIndex, AddForeignKey
}
}
}
Обратите внимание, что в большинстве затронутых моделей данных последние изменения отсутствуют.
В настоящее время я вынужден создавать все свои миграции на VS2015. Есть ли способ заставить VS2017 "вести себя"?
Версия:
- Visual Studio Pro 2015 (14.0.25431.01, обновление 3)
- Visual Studio Pro 2017 (15.9.7)
- EntityFramework.6.2.0