#c# #entity-framework #ef-code-first
#c# #entity-framework #ef-code-first
Вопрос:
Я работаю над приложением, которое использует ASP.Net Сначала код MVC 4, C # и Entity Framework. Существует одна модель (таблица), которая становится довольно большой, и я беспокоюсь, что в столбце Identity закончатся значения (Int32.MaxValue) в следующем году или около того.
Я ищу способ изменить этот идентификатор с int на long. В прошлом, когда я пробовал это, EF не позволял мне делать это, если только он не удалял таблицу и не создавал ее заново. Это не вариант, так как сайт уже запущен, и в этой таблице есть текущие данные.
Есть ли способ сделать это? До сих пор мои поиски в Интернете и поиски в Stackoverflow не дали мне никаких подсказок о том, как это сделать.
Ответ №1:
Требуется миграция сначала с кодом:
1) Обновите свою модель
2) Создайте свою миграцию
3) Напишите пользовательский SQL в сгенерированной миграции, чтобы удалить ваш PK и каждый FK, который ссылается на него. Это может стать довольно запутанным, поскольку вам нужно выяснить имена. Поместите это над вашим AlterColumn .
4) Напишите пользовательский SQL для повторного добавления ваших PK и FKS и поместите его в свой AlterColumn.
5) Теперь сделайте обратное в своем сценарии Down.
К вашему сведению, это невозможно с Azure SQL. В этом случае вы должны создать новую таблицу.
Комментарии:
1. Спасибо, что перезвонили мне. Я этого боялся. К сожалению, мы используем sql azure.
2. Как вы «создаете свою миграцию», если используете миграции code first?
Ответ №2:
Я только что сделал это с EF 6.1.3 с SQL Server, и после изменения моей модели и запуска Add-Migration EF смог самостоятельно создать правильную миграцию! Фантастика!
Лучшее решение для тех, кто использует ту же настройку (что, я полагаю, является наиболее распространенным вариантом использования EF6), — это обновить библиотеку EF, изменить свой код, создать миграцию как обычно и убедиться, что она выполняет то, что Джефф описал выше.