我收到此错误消息:
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"]));
}
}
答案 0 :(得分:-1)
protected User User
{
get
{
if (_user != null)
return _user;
问题在于上面的语句,您将用户存储在控制器中的变量中,该变量可能存在于会话的生命周期之外。您不应该将实体存储在这些变量中,而是存储主键并在需要时获取实体/或存储DTO。