Для меня неожиданно возникла проблема с тем, что столбец идентификатора автоинкремента MSSQL-сервера работает не так, как я ожидал.
Это не гарантирует последовательную последовательность. Я имею в виду, что если он идет как 1, 2, 3, 4, 5
, то если вы перезапустите сервер, он может легко продолжить как 10006, 10007, 10008, 10009, 10010
. Если у вас есть некоторые документы, сгенерированные с этими номерами (скажем, контракты), это может привести к ситуации, когда у вашей компании были контракты с номерами 1, 2, 3, 4, 5
, а затем случайно было изменено на 10006, 10007, 10008, 10009, 10010
.
На других RDBM автостолбец -increment всегда сохраняет согласованность, и не имеет значения, перезапустили ли вы его или нет.
Так что теперь я хочу изменить этот столбец, чтобы он обслуживался последовательностью. Вопрос в том, как сделать это максимально плавно? Я использую Entity Framework и его механизм миграции.
Столбец определен как:
CREATE TABLE [dbo].[
-- omitted for the sake of brevity
[CompanyNo] [bigint] IDENTITY(1,1) NOT NULL
-- omitted for the sake of brevity
);
Лучше всего создать миграцию:
- Получениетекущее последнее значение столбца
CompanyNo
- Изменение столбца без автоматического увеличения
- Создание последовательности с начальным значением того, что было на шаге 1
Технологии:
- Entity Framework 6 + Миграции + Первый код
- MSSQL
- ASP.NET MVC