Подтвердить что ты не робот

HiLO для платформы Entity

Кто-нибудь реализовал генератор ключей HiLO для платформы Entity Framework.

Узнайте больше о HiLo здесь: Я рекомендую вам прочитать http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-explained.html подробное объяснение недостатков выбора личности.

4b9b3361

Ответ 2

Спасибо за ответы

Думаю, мне просто нужно подождать:-) EF движется в правильном направлении, любите CTP5.

Мне нужно прокомментировать ответ от "Рэпа". Использование случайного Guid в качестве индексов может действительно замедлить производительность на SQL Server, потому что индексы для каждой вставки становятся фрагментированными. Это я узнал из реального мира, когда начал работать в новой компании, у которой были большие проблемы с производительностью на серверах sql. переход от guid к bigint решил проблему. и не было необходимости постоянно переиндексации.

Ответ 3

К сожалению, у EF нет ничего очень близкого к генераторам POID, например, NHibernate, хотя я слышал слухи о том, что подобные возможности будут включены в следующий выпуск EF. (Что?!? Microsoft, кооптирующая хорошую идею конкурента? Непонятная!)

Было бы не слишком сложно обрабатывать Lo часть HiLo самостоятельно, но часть Hi была бы сложной, если бы мы не смогли заставить EF сотрудничать. Это заставит Microsoft реорганизовать части EF, что, вероятно, почему никто не пытался это сделать и опубликовать его как проект с открытым исходным кодом для github или codeplex.

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

var id = Guid.NewGuid();

Затем назначьте его идентификатору таблицы. Это можно сделать в SaveChanges.

Я знаю, что это не так хорошо, как HiLo, но так близко, как мы пришли. Он по-прежнему имеет преимущества работы в автономном режиме и гарантии действительных и уникальных идентификаторов.

Ответ 4

Структура IMO Entity не имеет эквивалента генераторам NHibernate. Единственной функцией, доступной в EF, является StoreGeneratedPattern, которая может быть установлена ​​в Identity. StoreGeneratedPattern просто означает, что DB назначит ключ, и ключ возвращается как часть операции вставки обратно в контекст EF (сложнее с гидами).

Если вы хотите иметь некоторый эквивалент генератору POID NHibernate, вам необходимо переопределить SaveChanges или обработать SavingChanges в ObjectContext. Затем вы можете вручную назначить идентификатор всем вставленным объектам из алгоритма POID по вашему выбору, но вам нужно реализовать алгоритм.