我收到这个错误,想知道是否有人有任何想法如何调试。Nhibernate - 未能初始化一个集合...没有会话或会话被关闭
由于
初始化[GL.Objects.Profile`1 [[GL.Objects.Education.Education, GL.Objects,版本= 0.1.1.0, 文化=中性 公钥= ebf25c7be4be0c91 ]]#289289]
-failed懒洋洋地初始化角色的集合:
GL.Objects.Profile`1 [GL.Objects.Education.Education, GL.Objects,版本= 0.1.1.0 , 文化=中性, 公钥= ebf25c7be4be0c91]。Profilables,
没有会话或会话已关闭”
启动会话
var watsonService = new WatsonService();
这段代码保存实例化的对象。
watsonService.SaveEducation(e);
epf1.Profilables.Add(e);
watsonService.SaveEducationProfile(epf1);
epf2 = watsonService.GetEducationProfile(epf1.ID.Value);
第一断言通过就好了。 epf2有一个id并被实例化。
Assert.AreEqual(epf1.ID, epf2.ID);
此断言失败。 Profileables匹配一个组合表,这个ID被插入成功。但是现在,当我尝试访问集合中的第一个元素时,它失败了。
Assert.AreEqual(epf1.Profilables[0].ID, epf2.Profilables[0].ID);
这是得到年代由GetEducationProfile方法调用的方法实现。
public T Get<T>(int id) where T : IDataObject
{
return (T)_session.Load(typeof(T), id, LockMode.Read);
}
这是在流利的映射文件的构造函数的定义。
public EducationProfileMap()
{
Table("Profile");
Id(x => x.ID)
.Column("ProfileID")
.GeneratedBy
.HiLo(FluentConst.HILO_TABLE,
FluentConst.NEXTHI_COLUMN,
FluentConst.MAXLO,
String.Format(FluentConst.WHERE_FMT_STR, "Profile"));
Map(x => x.Type).CustomType<int>().Column("ProfileType");
HasManyToMany(x => x.Profilables)
.ParentKeyColumn("ProfileID")
.ChildKeyColumn("EducationID")
.Cascade.All()
.Table("EducationProfile");
}
会话管理可能是NHibernate的一大痛苦。延迟加载使得它更加复杂。 – 2011-03-23 22:56:59