HiLO用于实体框架

时间:2010-07-02 08:09:47

标签: entity-framework-4 hilo

是否有人为实体框架实施了HiLO密钥生成器。

在此处阅读有关HiLo的更多信息: 我建议您阅读http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-explained.html,了解选择身份的缺点的详细解释。

5 个答案:

答案 0 :(得分:5)

是的,有人为实体框架实施了HiLO。我自己没有测试过: http://joseoncode.com/2011/03/23/hilo-for-entityframework/

答案 1 :(得分:2)

感谢您的回答

我想我只需要等待:-) EF正朝着正确的方向前进,喜欢CTP5。

我需要评论“说唱”的答案。使用随机Guid作为索引可能会降低SQL Server的性能,因为每个插入的索引都会碎片化。 这是我从现实世界中学习的,当时我开始在一家新公司工作,这家公司在SQL服务器上的性能存在很大问题。从guid转移到bigint解决了这个问题。并且没有必要一直重新索引。

答案 2 :(得分:1)

不幸的是,EF并没有像NHibernate那样与POID生成器非常接近的东西,尽管我听说有类似功能将被包含在EF的下一个版本中。 (什么?!?微软选择竞争对手的好主意?不可思议!)

自己处理HiLo的Lo部分并不太难,但除非我们能让EF合作,否则Hi部分会很棘手。这将需要微软重构部分EF,这可能就是为什么没有人试图将其作为github或codeplex上的开源项目发布的原因。

与此同时,我们用于离线生成记录然后在以后同步的内容是全局唯一标识符。

var id = Guid.NewGuid();

然后将其分配给表的id。这可以在SaveChanges中完成。

我知道它不如HiLo好,但它和我们一样接近。它仍然具有脱机工作并保证有效和独特ID的优点。

答案 3 :(得分:0)

IMO Entity框架与NHibernate的生成器没有任何等价物。 EF中唯一可用的功能是StoreGeneratedPattern,可以设置为Identity。 StoreGeneratedPattern只是意味着DB将分配一个键,并且该键作为插入操作的一部分返回到EF上下文(使用Guids更难)。

如果你想要一些NHibernate POID生成器的等价物,你必须覆盖SaveChanges或处理ObjectContext上的SavingChanges。然后,您可以根据您选择的POID算法为所有插入的实体手动分配ID - 但您必须实现该算法。

答案 4 :(得分:0)

实体框架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();
    }
}