C# 随机NHibernate索引失效异常

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

NHibernate似乎失败了,出现了IndexOutfrange异常。代码大部分时间都可以工作,但会导致随机应用程序崩溃

    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>