C# 流利的NHibernate:“;集合不与任何会话关联“;

C# 流利的NHibernate:“;集合不与任何会话关联“;,c#,asp.net,.net,nhibernate,fluent-nhibernate,C#,Asp.net,.net,Nhibernate,Fluent Nhibernate,我收到以下错误消息: collection is not associated with any session 当我执行此代码时: var post = Posts.Query().First(p => p.Id == id); id通过控制器传递 我的映射如下所示: public PostMap() { Id(x => x.Id); Map(x => x.Title); Map(x => x.UserId); Map(x =>

我收到以下错误消息:

collection is not associated with any session
当我执行此代码时:

var post = Posts.Query().First(p => p.Id == id);
id通过控制器传递

我的映射如下所示:

public PostMap()
{
    Id(x => x.Id);
    Map(x => x.Title);
    Map(x => x.UserId);
    Map(x => x.DateTime);
    Map(x => x.Content);
    Map(x => x.CategoryId, "category");
    Map(x => x.ReplyTo, "reply_to");
    References(x => x.User, "userid").ReadOnly().Not.LazyLoad();
    References(x => x.Category, "category").ReadOnly().Not.LazyLoad();
    HasMany(x => x.Replies).KeyColumn("reply_to").ReadOnly().Not.LazyLoad();
    Table("posts");
}
public CategoryMap()
{
    Id(x => x.Id);
    Map(x => x.Name);
    Map(x => x.ParentId, "parent");
    Map(x => x.SubCategory, "subcategory");
    HasMany(x => x.Posts).KeyColumn("category").ReadOnly().Not.LazyLoad();
    HasMany(x => x.Categories).KeyColumn("parent").ReadOnly().Not.LazyLoad();
    Table("categories");
}
public UserMap()
{
    Id(x => x.Id);
    Map(x => x.Username).Not.Nullable();
    Map(x => x.Password).Not.Nullable();
    Map(x => x.Email).Not.Nullable();         
    Map(x => x.Firstname);
    Map(x => x.Surname);
    Map(x => x.Salt);
    Map(x => x.Privilege);
    HasMany(x => x.Messages).KeyColumn("msg_to_userid").ReadOnly().Not.LazyLoad();
    HasMany(x => x.SentMessages).KeyColumn("msg_from_userid").ReadOnly().Not.LazyLoad();
    Table("users");
}
Query()是一个返回IQueryable()的方法

有人知道问题是什么吗

编辑 这真的很奇怪。如果用户已登录,则根本无法工作如果用户未登录,则每隔一段时间它就会工作一次。如果我得到异常,继续并再次刷新,它会工作,如果我再次刷新,它就不工作。我相当肯定这与会话和映射有关

我的会话在BaseController中是这样设置的

protected HttpSessionState SessionState
{
    get { return System.Web.HttpContext.Current.Session; }
}
    protected User User
    {
        get
        {
            if (_user != null)
                return _user;
            if (SessionState["User"] == null)
                return null;
            return (_user = Users.Get((int)SessionState["User"]));
        }
    }

问题在于上面的语句,您将用户存储在控制器中的变量中,该变量可能存在于会话的生命周期之外。您不应该将实体存储在此类变量中,而应该存储主键,并在需要时获取实体/或存储DTO。

hibernate的全部要点是,它允许您将对象图映射到其可用的表示形式-如果您不这样做,那么您也可以使用hibernate。这与此相反如何回答?
protected User User
    {
        get
        {
            if (_user != null)
                return _user;