确定NHibernate实体是否具有级联记录

本文关键字:级联 记录 是否 NHibernate 实体 确定 | 更新日期: 2023-09-27 18:21:11

我正在循环,并将数百万条记录插入到我的数据库中。性能是首要任务。

我想利用无状态会话,但正如您可能知道的那样,它们不支持在更复杂的实体上级联对象。

如果有一种通用的方法可以确定一个实体是否有级联记录?如果是,我将使用常规会话,如果不是,则使用无状态会话。

这样做有意义吗?如果是这样,最好的方法是什么?

protected virtual ISession Session
{
  get { return ....SessionFactory.GetCurrentSession(); }
}
protected virtual IStatelessSession StatelessSession
{
   get { return ....SessionFactory.OpenStatelessSession(); }
}
public virtual T SaveOrUpdate(T entity)
{ 
    if(entity.HasCascadingrecords) //<- Something like this
    {
        Session.Save(entity);
    }
    else
    {
         StatelessSession.Save(entity);
    }
}

确定NHibernate实体是否具有级联记录

让我们按照这些来获得更多的初始细节:

  • NHibernate ClassMap获取属性的列名
  • 探索nhibernate映射

最后,我们可以使用下面这样的代码段:

// get type of the Entity we need
var entityType = typeof(TEntity);
// get persister
var entityType = typeof(TEntity);
var factory = ... // get factory
var persister = factory.GetClassMetadata(entityType) as AbstractEntityPersister;
// check this setting
var hasCascades = persister.HasCascades;
// use it somehow
return hasCascades