NHibernate搜索索引poco对象引发TransientObject异常

NHibernate搜索索引poco对象引发TransientObject异常,nhibernate,nhibernate.search,Nhibernate,Nhibernate.search,使用普通poco对象在FullTextSession上调用Index方法时抛出以下错误,可用于代理对象 堆栈跟踪: [TransientObjectException:实例未与此会话关联] NHibernate.Impl.SessionImpl.GetIdentifierObject对象对象+500 我试图从nhibernate选择方法中挤出性能,我有以下代码: public virtual IList<T> LoadSearch() { return

使用普通poco对象在FullTextSession上调用Index方法时抛出以下错误,可用于代理对象

堆栈跟踪:

[TransientObjectException:实例未与此会话关联] NHibernate.Impl.SessionImpl.GetIdentifierObject对象对象+500

我试图从nhibernate选择方法中挤出性能,我有以下代码:

    public virtual IList<T> LoadSearch()
    {
        return Adapater.Session.QueryOver<T>()
            .SelectList(e =>
            {
                e.Select(x => x.Id);
                e.Select(x => x.Title);
                e.Select(x => x.Description);
                return e;
            }).List<object[]>()
            .Select(props => new T
            {
                Id = (Guid)props[0],
                Title = (string)props[1],
                Description = (string)props[2]
            }).ToList();
    }

有没有方法返回代理结果?或者如何使列表适应代理列表?

我认为您只能索引与会话关联的对象,即代理实体

您返回的普通POCO不是来自NH,因此与NH会话无关


您可以尝试使用ISession.Lockinstance、NHibernate.LockMode.None;在每个实体上,将其与会话关联,但我真的不知道这是否有效。

我认为您只能索引与会话关联的对象,即代理实体

您返回的普通POCO不是来自NH,因此与NH会话无关


您可以尝试使用ISession.Lockinstance、NHibernate.LockMode.None;在每个实体上将其与会话关联,但我真的不知道这是否有效。

不确定这是否会起作用,因为要重新连接,我认为您必须调用会话上的更新才能重新连接。一旦会话被刷新,它将覆盖数据库中的当前条目。放弃此路径,我已经在我的域模型上更改了到惰性负载关联和属性的fluent映射。我已经获得了相同的结果,但还有一个额外的好处,就是对象被包装在一个NHibernate代理中返回。不确定这是否会起到重新附加的作用,我想你必须在会话中调用update来重新附加。一旦会话被刷新,它将覆盖数据库中的当前条目。放弃此路径,我已经在我的域模型上更改了到惰性负载关联和属性的fluent映射。我已经获得了相同的结果,但还有一个额外的好处,就是对象被包装在NHibernate代理中。