1

我想知道这对于任何有经验的 NHibernate 开发人员来说是否熟悉,或者是否有人可以告诉我从哪里开始尝试解决这个问题:

我继承了一个用 ASP.NET 1.1 编写的 NHibernate 站点,使用 NHibernate 0.6 和 .NET 远程处理驻留在数据库服务器上的 DAL 层。我一直在尝试将其升级到 ASP.NET 3.5 和 NHibernate 1.2.1.4。

我用直接的数据库连接替换了 .NET 远程处理设置,一切正常,直到站点承受一定的负载,然后 NHibernate 调用开始间歇性地失败并抛出异常:ADOException 无法执行查询,然后是 NHibernate 生成的 SQL 语句。

给出错误的堆栈跟踪是:

NHibernate.Loader.Loader.LoadEntity(ISessionImplementor session, Object id, IType identifierType, Object optionalObject, Type optionalEntityName, Object optionalIdentifier, IEntityPersister persister)
   at NHibernate.Loader.Entity.AbstractEntityLoader.Load(ISessionImplementor session, Object id, Object optionalObject, Object optionalId)
   at NHibernate.Loader.Entity.AbstractEntityLoader.Load(Object id, Object optionalObject, ISessionImplementor session)
   at NHibernate.Persister.Entity.AbstractEntityPersister.Load(Object id, Object optionalObject, LockMode lockMode, ISessionImplementor session)
   at NHibernate.Impl.SessionImpl.DoLoad(Type theClass, Object id, Object optionalObject, LockMode lockMode, Boolean checkDeleted)
   at NHibernate.Impl.SessionImpl.DoLoadByClass(Type clazz, Object id, Boolean checkDeleted, Boolean allowProxyCreation)
   at NHibernate.Impl.SessionImpl.Load(Type clazz, Object id)
4

2 回答 2

2

问题是非线程安全的休眠会话工厂。将项目更改为使用 http 模块,以便每个请求使用一个休眠会话(并确保不要为非 .as*x 文件上的 rquests 打开会话),一切都很好。

于 2008-10-10T13:30:09.800 回答
1
  • 验证您的连接设置。
  • 如果可以的话,尽可能多地缓存对象以避免破坏服务器
  • 确保你的表被索引了……那是一个巨大的
  • 确保 log4net 的日志记录变为警告/错误,这样您就不会在日志中写百科全书
于 2008-10-09T16:19:29.893 回答