Первый код EF 6.1 Изменение идентификатора с Int на Long

#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, изменить свой код, создать миграцию как обычно и убедиться, что она выполняет то, что Джефф описал выше.