关于延迟加载:nhibernatelazyload创建新的isession

nhibernate lazyload creates new isession

我可以在延迟加载时阻止 nhibernate 创建新的 ISession 吗?怎么样?

更正:我的意思是新的 IDbConnections。我已经实现了自己的 DriverConnectionProvider,我看到它由于延迟加载而被调用


NHibernate 不会主动创建任何 ISession。请发布一些您认为发生这种情况的示例。底层连接实际上是在延迟获取期间打开的,只是因为 NH 需要连接到数据库才能填充延迟集合/关联。


如果您使用 NHibernate 作为连接管理器和 sql 生成器。 IE。你有很多类似下面的代码:

1
2
3
4
5
6
7
public IList<Entity> GetEntities()
{
    using (ISession session = CreateNewSession())
    {
        return session.List<Entity>();
    }
}

那么你不能使用延迟加载。所以你需要禁用延迟加载。这可以通过在 hibernate-mapping 标记上指定 default-lazy="false" 来轻松实现
http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-mapping

我可能会推荐使用 IStatelessSession 而不是默认的 ISession。请记住,这不是 NHibernate 的推荐用法。