C# 随机NHibernate索引失效异常
NHibernate似乎失败了,出现了IndexOutfrange异常。代码大部分时间都可以工作,但会导致随机应用程序崩溃C# 随机NHibernate索引失效异常,c#,nhibernate,C#,Nhibernate,NHibernate似乎失败了,出现了IndexOutfrange异常。代码大部分时间都可以工作,但会导致随机应用程序崩溃 public T GetByID<T>(Guid Id) where T : Modules.Common.EntityBase { try { ISession session = NHibernateHelper.GetCurrentSession(); var
public T GetByID<T>(Guid Id) where T : Modules.Common.EntityBase
{
try
{
ISession session = NHibernateHelper.GetCurrentSession();
var product = session
.CreateCriteria(typeof(T))
.Add(Restrictions.Eq("Id", Id))
.UniqueResult<T>();
return product;
}
catch (HibernateException ex)
{
NHibernateHelper.CloseSession();
throw;
}
}
也许是远射,但看看这个
结果表明,在WCF中,HttpConext为null,这是因为我基于当前HTTPContext的线程分离(假设它的功能类似于常规web应用程序) 看到了一个关于这个的教程,看起来它可能有用,但是在实现解决方案时遇到了问题。然而,在每个请求场景中使用此方法似乎非常复杂。。。有5个对象,它需要修改每个服务 请注意,如果它们仅在HTTP环境中工作,则可以使用AspNetCompatibilityRequirements属性和配置部分使WCF具有HTTPContext值 类别:
[System.ServiceModel.Activation.AspNetCompatibilityRequirements(RequirementsMode = System.ServiceModel.Activation.AspNetCompatibilityRequirementsMode.Required)]
public class CaseService : ServiceBase, ICaseService
{
...
}
Web.config:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
...
</system.serviceModel>
...
我在某个地方读到,NHibernate3.0中提供了WCFSessionProvider(或类似的东西),所以我将等待该解决方案成为真正的解决方案 调试此异常后,您从何而来?它投在哪条线上?如果我不得不猜测,我会说它来自
NHibernateHelper.GetCurrentSession()
方法,除非您正在获取的某个实体在NHibernate尝试赋值时抛出了一些setter逻辑。我同意@Jay。能否发布GetCurrentSession()代码?这与问题无关,但如果您有Id,则应使用session.Get(Id)
,而不是条件查询。@Diego。我会更新它,让它看起来更好@松鸦。。。它就在DBReader的某个地方。下一次出现错误时,我将发布StackTrace。显然,对于WCF HttpContext.Current==null,这将破坏我所实施的每请求会话管理。关于为调用存储会话的最佳方法有什么想法吗?我已经了解了所有列都是唯一的(实际上使用Fluent进行配置,并且我没有更改列名。有趣的是,只有在调用方法“GetByID”时才会出现错误吗?(另外,提供stacktrace)
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
...
</system.serviceModel>