Я пытаюсь создать пользовательский шаг миграции, чтобы очистить некоторые значения по умолчанию в нашей базе данных.По сути, у нас есть некоторые данные, которые либо недействительны и должны быть обновлены, а в других случаях их вообще не существует.Система установлена на нескольких серверах, и большая часть этих данных была добавлена вручную в один момент, поэтому трудно определить, какой сервер имеет какие данные.
Я хочу создать шаг миграции, чтобы очистить все этовверх.Если это значение не существует в таблице, мне нужно вставить его.Однако, если он существует, я либо обновил его, либо просто удалил, а затем вставил.Мне трудно понять, как это сделать.
Add-Migration DataCleanup
Создать шаг миграции
public partial class DataCleanup : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.InsertData(
table: "Blogs",
columns: new[] { "BlogId", "Url" },
values: new object[] { 4, "http://sample4.com" });}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DeleteData(
table: "Blogs",
keyColumn: "BlogId",
keyValue: 4);
}
}
Это будет работать, если строка не существовала ранее, но если строкасуществует, тогда мне нужно будет обновить, чтобы убедиться, что значение является правильным значением.Я не беспокоюсь о первичных ключах, так как это справочная таблица, они «должны» быть одинаковыми.
Единственный другой вариант, который я могу придумать, - это запустить усечение для этих таблиц, а затем просто запустить вставки после.
migrationBuilder.Sql("TRUNCATE TABLE [Blogs]", true);
Примечание вниз
Я склоняюсь к тому, что я вообще не в состоянии справиться.Там не будет никакого способа узнать, в каком состоянии этот сервер был до того, как я запустил это.