オブジェクトのグラフを保存しているシーンがあり、後で別のプロセスで取得する必要があります。本当にデータ操作の単純なケース。
問題は、オブジェクトとそれに関連付けられたコレクションが正常に保存された後 (出力の挿入ステートメントで示されているように)、同じオブジェクトに対する後続のクエリが、関連付けられたコレクションに対して空のコレクションを返すことです。その前に Flush() を呼び出します。奇妙なことに、アプリケーションを閉じて再度開くと、入力されたコレクションが返されます。
Appointment クラスのこのマッピングがあります
<set name="workhours" inverse="true" cascade="all" lazy="true">
<key>
<column name="person" />
</key>
<one-to-many class="workhour" />
</set>
データ取得用のコードは次のとおりです
Method1()
{
DataAccessManager.StartOperation();
IEnumerable<Entity> q = GetQueryProvider();
if (total > 0)
{
q = q.Skip(startIndex).Take(total);
}
totalfound = q.Count();
IList<Entity> list = q.ToList();
DataAccessManager.EndOperation();
return list;
}
protected override IEnumerable<Entity> GetQueryProvider()
{
return DataAccessManager.GetQueryProvider<Appointment>();
}
これは保存用です
if (this.Patient.Appointments== null)
this.Patient.Appointments= new Iesi.Collections.Generic.HashedSet<Appointment>();
this.Patient.Appointments.Add(this);
if (this.Doctor.Appointments== null)
this.Doctor.Appointments= new Iesi.Collections.Generic.HashedSet<Appointment>();
this.Doctor.Appoint.Add(this);
Entity ent = base.Save();
return ent;
//the base call:
DataAccessManager.StartOperation();
try
{
Entity t = DataAccessManager.Save<Entity>(this);
DataAccessManager.EndOperation();
return t;
}
catch (NHibernate.HibernateException ex)
{
//handling }
//the Data Access save method
public T Save<T>(T t) where T : Entity
{
try
{
CurrentSession.SaveOrUpdate(t);
return t;
}
///exception handling and stuff
}
Commit() と Disconnect() でセッションを終了します。