为NHibernate HiLo生成器设置默认的max_lo?

时间:2011-09-01 16:19:55

标签: nhibernate

有没有办法为max_lo设置一个对所有映射实体生效的默认值?我的所有实体当前都是通过Xml映射的。我知道默认值是32678,但我想将其减少到1000。

我已经看过NH配置xsd,我看不到任何设置。我认为如果你按代码进行映射,你应该能够实现这个目标,但我目前正在使用Xml并且不想改变它。

感谢。

3 个答案:

答案 0 :(得分:1)

您还可以覆盖SessionFactory生成的值,该值仅执行一次:

private void InitSessionFactory()
{
     var cfg = new Configuration().Configure();
     foreach (var cm in cfg.ClassMappings) {
           if (cm.Identifier.IsSimpleValue) {
               var simpleVal = cm.Identifier as SimpleValue;
               if (simpleVal.IdentifierGeneratorStrategy == "hilo"){
                    simpleVal.IdentifierGeneratorProperties["max_lo"] = "1000";
               }
           }
     }
     sessionFactory = cfg.BuildSessionFactory();
 }

这个NH2代码因此对于NH3可能存在一些差异

答案 1 :(得分:0)

无法从hbm配置默认/全局。 Int16.MaxValue只是在NHibernate中硬编码(截至3.2)。 TableHiLoGenerator source

public override void Configure(IType type, ...)
{
    ...
    maxLo = PropertiesHelper.GetInt64(MaxLo, parms, Int16.MaxValue);
    ...
}

我猜您可以打开功能请求here

答案 2 :(得分:0)

看起来可以通过按http://daniel.wertheim.se/2011/03/08/nhibernate-custom-id-generator/扩展NH hilo生成器来实现此目的