任何人都遇到过在主键以外的列上实现 hilo 类型解决方案的方法。有一个像 jobno 这样的列,我不想成为主键(如使用 guidcomb 并对此感到满意),并且需要为其提供序列号,并且不想点击数据库来获取下一个值。
最佳答案
我不知道任何“开箱即用”的东西,但是您可以创建一个 NHibernate.Id.TableHiLoGenerator 的实例(NHibernate 使用它来生成 id 值)并使用它来生成值。但是您仍然需要手动设置实体的生成值。
您还可以通过继承 TableHiLoGenerator 来创建自己的生成器:
public class MyHiLoGenerator : TableHiLoGenerator
{
private readonly ISessionFactory _sessionFactory;
public MyHiLoGenerator(ISessionFactory sessionFactory)
{
_sessionFactory = sessionFactory;
Configure(NHibernateUtil.Int64, new Dictionary<string, string> {{"table", "mytable"}, {"column", "mycolumn"}}, ((SessionFactoryImpl) sessionFactory).Dialect);
}
public long NextValue()
{
return (long) Generate((ISessionImplementor) _sessionFactory.GetCurrentSession(), null);
}
}
这只是一个简单的示例,根本没有经过测试,但它仍然展示了如何使用 TableHiLoGenerator 的想法。我自己使用类似的方法生成 HiLo 值。
关于NHibernate HiLo 在主键以外的列上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11358435/