2011-08-18 163 views
2

有几个重载:你能解释一下GeneratedBy.HiLo(...)的参数吗?

GeneratedBy.HiLo(string maxLo); 
GeneratedBy.HiLo(string maxLo, Action<ParamBuilder> paramValues); 
GeneratedBy.HiLo(string table, string column, string maxLo); 
GeneratedBy.HiLo(string table, string column, string maxLo, string where); 
GeneratedBy.HiLo(string table, string column, string maxLo, Action<ParamBuilder> paramValues); 

我理解概念的高/低位算法做了什么。但是这些参数做什么?我无法在Hibernate上找到他们实际做的文档。

maxLo应该是一个名字还是数字?什么是paramValues? tablecolumn的用途是什么?基于NHibernate的

示例用法入门教程:

public class StoreMap : ClassMap<Store> 
{ 
    public StoreMap() 
    { 
     Id(x => x.Id).GeneratedBy.HiLo("something"); 
     Map(x => x.Name); 
     HasMany(x => x.Staff) 
      .Inverse() 
      .Cascade.All(); 
     HasManyToMany(x => x.Products) 
      .Cascade.All() 
      .Table("StoreProduct"); 
    } 
} 
+0

器MAX10是希洛的低价值,因此,如果指定10时,将产生10个号码你喜。所以如果你的Hi现在是3,它会产生31到40(或30到39,我忘记了)。这只适用于你允许NHibernate为你生成表格的情况。如果你使用Table/Column/Condition,那么你可以指定NHibernate获取Hi值的位置。从。 – Phill

+0

您应该将其作为答案提交。 – Amy

+0

完成后,我充实了一下,并附上了一个链接到我的博客,其中显示了如何使用自己的表格配置HiLo。希望能帮助到你。 – Phill

回答

7

器MAX10是希洛的罗值。

根据插入表格的频率,您应该指定值为10,100或1000.如果将值指定为10,NHibernate将从数据库中获取Hi值,并使用低值生成你的HiLo。

如果您经常插入,那么您应该指定一个较高的Lo(例如100或1000),如果您插入次数较少,那么您应该指定一个较低的Lo。这是因为每次创建会话工厂时都会从数据库中提取新的Hi值。如果当前Hi为5,Lo为100,并且插入了100个项目中的13个,并且创建了新的会话工厂(从重新启动网站或应用程序),那么它将获得6的新Hi。将具有间隙从513至600

因此,如果你喜是目前3,那么这将产生的值从31至40同样地,如果你的罗是1000,它会产生从3001值到4000

的附加参数允许您指定存储Hi值的表格。默认情况下,如果NHibernate将它配置为创建/更新数据库,它将为您生成此表,但是这些参数允许您自行设置表。

前段时间我写了一篇博客文章,其中显示了每个Hi的列和每个Hi的Row。

http://www.philliphaydon.com/2010/10/24/using-hilo-with-fluentnhibernate/

编辑:一个螺如7

希洛作为一系列数字计算的行为,例如,如果我们有3嗨,和为10的螺,范围为:

3 * 10 = 30 3×10 + 10 = 40

所以本身ssion factory的范围是30到40,当你要求一个对象的Id时,它会抓取它的当前值(30),并添加1.因此Id = 31.下一个对象将取31 + 1 = 32。发生这种情况直到达到40,此时它会进入数据库并要求下一个Hi。

如果你有两个Web服务器,第二个Web服务器可以问下一个嗨这是4,这意味着第一个Web服务器将获得5

所以,你的下一个范围是50〜60。


如果罗为7,我们将得到:

0 * 7 = /0 * 7 + 7 = = 1-7

1 * 7 = /1 * 7 + 7 = = 8-14

2 * 7 = /2 * 7 + 7 = = 15-21

所以它仍然有效。

但我个人认为它更容易与全值,10,100工作,1000

+0

增加了一个段落来讨论插入的频率以决定使用哪个Lo值。 – Phill

+0

还有一件事情我不能接受:如果你使用7作为lo数字,会有什么样的行为?嗨1去1-7,嗨2去8-14? – Amy

+0

@Inuyasha - 更新了答案,我希望能为你解释。你应该启动一个测试项目,并有一个游戏,所以你可以看到它也发生。我发现它总是有助于有视觉效果。 – Phill

相关问题