ahmed ali mohd Ответов: 3

Имена столбцов в каждой таблице должны быть уникальными. Имя столбца 'Url_Default' в таблице 'dbo.Профили задаются более одного раза


Во время первой миграции кода, когда PM>Update-база данных. Я получаю вышеуказанную ошибку. Как ее решить??

dharam1

Пожалуйста, предоставьте дополнительную информацию.

ahmed ali mohd

я строю проект MVC. я добавил модель со строковым значением Url_Default. Сейчас иам его обновления с помощью командной CodeFirstmigration вечера и GT;обновление-базы данных. Он отображает вышеуказанную ошибку

♥…ЯҠ…♥

Вы уверены, что у вас есть только один столбец с именем Url_Default? проверьте свой файл класса еще раз

ahmed ali mohd

на самом деле у меня есть 10 столбцов..я добавил url_default..it значит теперь у меня их 11

♥…ЯҠ…♥

Не могли бы вы проверить свою базу данных на наличие имени столбца, в команде кто-то может обновить базу данных с тем же именем столбца, и как только вы попытаетесь обновить ее, вы можете получить эту ошибку, проверить свою таблицу и отскочить назад

3 Ответов

Рейтинг:
21

Christian Graus

Ошибка означает то, что она говорит. У вас есть одно и то же имя столбца дважды


Maciej Los

Проще и быть не может!

Рейтинг:
2

Member 14959423

У меня была та же проблема, и мне потребовалось некоторое время, чтобы понять, что происходит. Проблема заключалась в том, что мне нужно было заполнить столбец, который я только что добавил, значением по умолчанию, которое нужно было получить с помощью функции, зависящей от другая сущность.

Поэтому, когда я делал это в том же сценарии миграции, когда он запускал этот 2-й шаг для запроса к другой сущности, потому что выполнение миграции еще не было зафиксировано .NET, как только я нажимал на другую сущность, тот же сценарий миграции запускался снова.

Это привело к тому, что он дважды запускал один и тот же AddColumn (), что и вызвало ошибку. Я бы лично счел это а ЖУК в миграциях code-first, поскольку это требует создания двух сценариев миграции, убедитесь, что 1-й полностью завершен до запуска 2-го.

На мой взгляд, это не просто глупо, это создает потенциальную миграционную катастрофу, потому что в моей ситуации этот столбец никогда не должен быть добавлен без заполнения его данными. Столбец, полный нулей, технически является недопустимым состоянием. Но если я чего-то не упустил, то нет никакого способа получить это значение по умолчанию из функции, которая зависит от другой сущности во время той же транзакции, потому что это вызовет повторное выполнение того же сценария миграции.

Я полагаю, что технически я мог бы добавить условие, которое проверяет существование этого нового столбца перед выполнением функции AddColumn (), но это тоже просто глупо. Весь смысл миграции кода в первую очередь заключается в предположении, что схема базы данных находится в определенном состоянии. Нет особого смысла добавлять обработку ошибок в сценарии, чтобы убедиться, что они работают только в том случае, если схема является чем-то неожиданным или-что еще хуже-что один из сценариев миграции уже запущен. Это просто очень, очень неправильно.


Рейтинг:
1

Member 14629312

Запустите программу Добавить-Миграция команда с помощью -IgnoreChanges флаг. Потом бежать обновленная база данных снова.

Эти команды должны выполняться в Консоль Диспетчера Пакетов.
Если Add-Migration-IgnoreChanges выбросил больше ошибок, запустите это, что "ваши предыдущие две миграции находятся в стадии ожиданияПример: Миграция-А , Миграция-Б

Бежать обновление-базы данных -цель миграции- и обновление-база данных-целевая миграция-B.
Надеюсь, это сработает..