16

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

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

4

5 回答 5

5

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

于 2011-11-24T12:34:47.287 回答
2

感谢您的回答

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

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

于 2011-01-01T15:46:24.997 回答
1

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

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

同时,我们用于离线生成记录并稍后同步的是全局唯一标识符。

var id = Guid.NewGuid();

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

我知道它不如 HiLo 好,但它和我们来的一样接近。它仍然具有能够离线工作并保证有效且唯一的 id 的优点。

于 2010-12-30T23:00:51.310 回答
0

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

如果你想拥有一些与 NHibernate POID 生成器等效的东西,你必须覆盖 SaveChanges 或处理 ObjectContext 上的 SavingChanges。然后,您可以从您选择的 POID 算法中手动将 ID 分配给所有插入的实体 - 但您必须实现该算法。

于 2010-12-29T13:32:09.647 回答
0

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();
    }
}
于 2016-09-16T21:42:50.440 回答