有没有办法为max_lo设置一个对所有映射实体生效的默认值?我的所有实体当前都是通过Xml映射的。我知道默认值是32678,但我想将其减少到1000。
我已经看过NH配置xsd,我看不到任何设置。我认为如果你按代码进行映射,你应该能够实现这个目标,但我目前正在使用Xml并且不想改变它。
感谢。
答案 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生成器来实现此目的