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;