判断 NHibernate 实体是否有级联记录
Determine if NHibernate entity has cascading records
我正在循环并向我的数据库中插入几百万条记录。性能是第一要务。
我想利用无状态会话,但您可能知道它们不支持在更复杂的实体上级联对象。
如果有一个通用的方法可以确定一个实体是否有级联记录?如果是,我将使用常规会话,如果不是,我将使用无状态会话。
这样做有意义吗?如果是这样,最好的方法是什么?
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);
}
}
让我们按照这些来获得更多初始细节:
- Exploring nhibernate mapping
最后,我们可以使用如下代码片段:
// 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
我正在循环并向我的数据库中插入几百万条记录。性能是第一要务。
我想利用无状态会话,但您可能知道它们不支持在更复杂的实体上级联对象。
如果有一个通用的方法可以确定一个实体是否有级联记录?如果是,我将使用常规会话,如果不是,我将使用无状态会话。
这样做有意义吗?如果是这样,最好的方法是什么?
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);
}
}
让我们按照这些来获得更多初始细节:
- Exploring nhibernate mapping
最后,我们可以使用如下代码片段:
// 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