Я хочу обновить новый столбец, который я создал в таблице, примерно так:
public partial class PortDealerTokens : DbMigration
{
public override void Up()
{
IEnumerable<DealerAdapter> dealers;
using (var context = new TestDriveContext())
{
dealers = context.Dealers.ToList();
}
foreach (var dealer in dealers)
{
using (var newContext = new TestDriveContext())
{
dealer.Token = < MyFunction >;
newContext.SaveChanges();
}
}
}
public override void Down()
{
}
}
Этот код не работает, потому что, когда я вызываю Update-Database, возникают ошибки, говорящие о невозможности вставить повторяющийся ключ в объект 'dbo .__ MigrationHistory'. Повторяющееся значение ключа: (201812180729383_PortDealerTokens.
Как я могу решить эту проблему? Есть ли лучшая стратегия?
Да, я попробовал. К сожалению без положительного результата. У меня такая же ошибка: stackoverflow.com/questions/53831052/…





Вы можете сделать это с помощью переопределить метод семян
или методом Sql в классе миграции
public partial class PortDealerTokens : DbMigration
{
public override void Up()
{
//Sql script to populate your data
Sql("");
}
public override void Down()
{
}
}
Обновлять
Однако у вас есть новая миграция или метод начального значения не запускается при запуске команды update-database.
на этом изображении
1-add-migration 'имя миграции' - добавление новой пустой миграции
2-обновление базы данных - применяя эту миграцию, затем метод Running Seed
База данных 3-updata - нет ожидающих явных миграций, затем метод Running Seed.
Это решение не сработает. Я не могу указать это в сценариях миграции, потому что мне нужно вызвать свой метод в статусе Sql. Переопределение начального метода также не работает, потому что моя переопределенная начальная функция не будет вызываться, потому что я использую это в существующем проекте, в котором уже реализованы миграции. Есть другое решение?
однако у вас есть новая миграция или нет, метод seed будет запущен, при запуске update-database метод seed будет запущен после применения новых миграций, если нет новой миграции для запуска метода начального числа, поэтому убедитесь, что метод, который вы вызовете в методе seed, будет не повредить ваши данные
Я пробовал это, и это сработало! Но метод seed всегда будет выполняться после Update-Database. Я хочу, чтобы этот метод начального значения выполнялся только один раз. Это возможно?
вы можете использовать раздел appsettings в web.config <add key = "ApplySeed" value = "true" /> // true или false защищенное переопределение void Seed (контекст Data.DBEntities) {строковое значение = ConfigurationManager.AppSettings ["ApplySeed"]; bool ApplySeed = Convert.ToBoolean (значение); if (ApplySeed) {// здесь ваш код}}
Может возникнуть проблема, если дважды запустить контекст во время миграции. Вы пытались переместить цикл foreach внутри первого, используя ...