HiLO для Entity Framework - PullRequest
       11

HiLO для Entity Framework

16 голосов
/ 02 июля 2010

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

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

Ответы [ 5 ]

5 голосов
/ 24 ноября 2011

Да, кто-то внедрил HiLO для Entity Framework. Я не проверял это сам, хотя: http://joseoncode.com/2011/03/23/hilo-for-entityframework/

2 голосов
/ 01 января 2011

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

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

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

1 голос
/ 31 декабря 2010

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

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

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

var id = Guid.NewGuid();

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

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

0 голосов
/ 17 сентября 2016

Entity Framework 7 имеет поддержку: https://channel9.msdn.com/Blogs/Seth-Juarez/Key-Generation-Strategies-in-Entity-Framework-7

public class ExampleContext : BaseContext { 

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.ForSqlServerUseSequenceHiLo();
    }
}
0 голосов
/ 29 декабря 2010

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

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

...