2011-09-01 72 views
1

有什麼辦法可以爲max_lo設置一個默認值,這個默認值會對所有映射的實體生效?我所有的實體都是通過Xml映射的。我知道默認值是32678,但我想將其降低到1000.爲NHibernate HiLo生成器設置默認max_loop?

我已經看過NH配置xsd,我看不到任何設置。我認爲如果你是通過代碼進行映射的話,你應該能夠實現這個功能,但是我現在使用的是Xml,並且不喜歡轉換。

謝謝。

回答

0

沒有辦法從hbm配置default/global。在NHibernate中簡單地對Int16.MaxValue進行硬編碼(從3.2開始)。 TableHiLoGeneratorsource

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

我想你可以打開功能要求here

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來說可能有一些差異