Здравствуйте, RushDevion, Вы писали:
RD>Нет, не пересекутся. Смотри.
RD>RD> CREATE SEQUENCE [dbo].[MySequence] START WITH 1 INCREMENT BY 10;
RD> SELECT NEXT VALUE FOR [dbo].[MySequence]; -- (1) возвращается 1
RD> SELECT NEXT VALUE FOR [dbo].[MySequence]; -- (2) возвращается 11
RD>
RD>Получение NEXT VALUE синхронизованы на уровне движка БД, т.е. там что-то типа такого:
RD>RD>lock(syncLock) {
RD> var old = current
RD> current += 10;
RD> return old;
RD>}
RD>
RD>В (1) мы получили значение 1. И мы знаем, что шаг sequence = 10.
RD>Это значит, что значения 1,2,3...10 можно спокойно использовать в качестве идентификаторов, т.к. следующий кто вызовет sequence получит уже 11.
RD>Аналогично после шага (2) можно использовать 11,12...20 и т.д.
Ага, ясно, благодарю. Собственно, я на хабре нашел статью, где обсуждался этот механизм, и там соотв. таблица
(sequence) генерится EF на уровне бд. Соотв. вопрос -- значит при создании контекста бд\сессии он, вновь
созданный контекст, будет неявно ходить в бд для получения нужной последовательности? Иначе как мы узнаем hilo?
S>> Если короче-- каковы сценарии hilo?
RD>Плюс, например, в логи можно писать ID-сущностей, не делая каждый раз SaveChanges.
Кстати, не факт -- получить мы получили, но может быть проблема сохранить все это в бд. Таким образом
у нас появляется неконсистентность -- типа пишем, что есть ид от бд, хотя его в реальности еще нету.
Ну т.е. при попытке сохранить данные может что-то пойти не так.
RD>Или иногда бывает нужна сквозная идентификация всех объектов в БД и поэтому отдельный IDENTITY на каждой таблицы не подходит.
А что это такое? Типа общий, уникальный id для всех объектов в бд?