开发者

Set default max_lo for NHibernate HiLo generator?

Is there any way to set a default value for max_lo that will take effect for all mapped entities? All of my entities are currently mapped via Xml. I know the default is 32678, but I would like to reduce this to 1000.

I've had a look through the NH configuration xsd and I can't see any settings in there. I think that you should be able to achieve this ok if you are mapping by code, but I am 开发者_运维百科currently using Xml and don't fancy changing across.

Thanks.


you can also override the value on SessionFactory generation, which is only done once:

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();
 }

this NH2 code so for NH3 there might be some differences


No way to configure default/global from hbm. Int16.MaxValue is simply hardcoded in NHibernate (as of 3.2). TableHiLoGenerator source:

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

I guess you can open feature request here.


It looks like it may be possible to do this by extending the NH hilo generator as per http://daniel.wertheim.se/2011/03/08/nhibernate-custom-id-generator/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜