我收到此错误,我想知道是否有人知道如何调试此错误。
由于
初始化[GL.Objects.Profile`1 [[GL.Objects.Education.Education, GL.Objects,版本= 0.1.1.0, 文化=中性, 公钥= ebf25c7be4be0c91]]#289289]
- 懒得初始化角色集合:
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);
}
这是Fluent Mapping文件中构造函数的定义。
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");
}
答案 0 :(得分:1)
我很抱歉没有提供更多相关信息。 问题来自会话的管理方式。
我的测试是实例化以下类:
public WatsonAdaptor(string user)
{
if (DataSession == null)
DataSession = new HibernateSession(
HibernateFactoryManager.HibernateFactory.Watson, user);
}
SaveEducation方法
调用以下方法
public int? SaveEducation(Education e) {
try
{
var watson = new WatsonAdaptor("ealite");
watson.Save(e);
return e.ID;
}
catch (Exception ex)
这会打开一个会话。
在返回时,会话被丢弃,因此不会发生延迟加载。
我需要做的是确保在会话仍处于打开状态时发生延迟加载。