是否有人为实体框架实施了HiLO密钥生成器。
在此处阅读有关HiLo的更多信息: 我建议您阅读http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-explained.html,了解选择身份的缺点的详细解释。
答案 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();
}
}