延迟加载:没有会话或者会话被关闭
本文关键字:会话 或者 延迟加载 | 更新日期: 2023-09-27 17:50:23
我对以下NHibernate行为感到困惑:
域类和映射:
public class Category
{
public virtual int ID { get; set; }
public virtual string Name { get; set; }
private IList<Product> _products;
public virtual IList<Product> Products
{
get { return new List<Product>(_products).AsReadOnly(); }
}
public Category()
{
_products = new List<Product>();
}
}
public class Product
{
public virtual int ID { get; set; }
public virtual string Name { get; set; }
public virtual Category Category { get;set; }
}
public class ProductMap : ClassMap<Product>
{
public ProductMap()
{
Schema("dbo");
Table("tProducts");
Id(x => x.ID);
Map(x => x.Name);
References(x => x.Category).Column("CategoryID");
}
}
public class CategoryMap : ClassMap<Category>
{
public CategoryMap()
{
Schema("dbo");
Table("tCategories");
Id(x => x.ID);
Map(x => x.Name);
HasMany(x => x.Products)
.KeyColumn("CategoryID")
.Access.CamelCaseField(Prefix.Underscore)
.Inverse()
.Cascade.All();
}
}
出现问题的代码:
Category category;
using (var session = sessionFactory.OpenSession())
{
category = session.Get<Category>(1);
}
using (var session = sessionFactory.OpenSession())
{
var products = category.Products; // exception
}
为什么当我尝试获取产品时没有会话异常?我这里有个会议!如何避免这种异常(我喜欢2个会话在这里,我想保持加载懒惰)?
提前感谢!
是否可以将对象重新连接到新会话:
ISession.Update(myDetachedInstance);
或者,如果对象没有改变:
ISession.Lock(myDetachedInstance, NHibernate.LockMode.None);
更多信息请参见:http://intellect.dk/post/Detached-objects-in-nHibernate-and-Lazy-loading.aspx
我得到了同样的错误,这是由于WPF UI坚持引用对象从旧的nhibernate会话后,我点击了"刷新"按钮,调用数据上下文的刷新,在会话中解除关联的所有缓存对象。
我需要确保"NotifyChange"被触发以使UI更新(并且UI正在监听它)。