Db4o で新しいオブジェクトを永続的な IObjectContainer にロードすることは可能ですか?
起動時に 1 つの接続 (IObjectContainer) を開くデスクトップ アプリケーションがあります。すべてのオブジェクトを次のようにクエリすると:
var objects = from DummyClass foo in session
select foo
すべてのオブジェクトを完全に選択します。ただし、この後に別のクライアントが新しいクラスを追加した場合、同じクエリは引き続き同じオブジェクトを選択し、新しいオブジェクトは選択しません。
私も知っています:
session.Ext().Refresh(obj, int.MaxValue);
しかし、新しいオブジェクトへの参照をアクティブ化していないので、そこにあります。新しいオブジェクトを更新するには?
注意: データが必要になるたびにセッションを開いたり閉じたりしたくありません。OODB (透過的なアクティブ化、ロード後のオブジェクトの永続性など) を利用したいのです。
ありがとうございました
UPDATE (理解を深めるためのコード例)
// store one class to fill database with some data
using (var mainSession = SessionFactory.CreateNewConnection())
{
mainSession.Store(new DummyClass());
mainSession.Commit();
}
using (var mainSession = SessionFactory.CreateNewConnection())
{
// returns one object
var objects = from DummyClass foo in session
select foo;
using (var secondSession = SessionFactory.CreateNewConnection())
{
secondSession.Store(new DummyClass());
secondSession.Commit();
}
// this loop reload objects known for mainSession (which is not new object)
foreach (var obj in objects2)
{
mainSession.Ext().Refresh(obj, int.MaxValue);
}
// new DummyClass is commited but still not visible (Read-Commited isolation)
// returns one object
var objects2 = from DummyClass foo in session
select foo;
}
using (var mainSession = SessionFactory.CreateNewConnection())
{
// returns two objects
var objects = from DummyClass foo in session
select foo;
}
次のようなものが必要です:
// refresh all objects of DummyClass
session.Ext().Refresh(typeof(DummyClass), int.MaxValue);