C# Db4o-刷新持久会话中的所有新对象
在Db4o中是否可以将新对象加载到持久化IObjectContainer中 我有一个桌面应用程序,它在启动时打开一个连接(IObjectContainer)。如果我使用以下命令查询所有对象:C# Db4o-刷新持久会话中的所有新对象,c#,db4o,object-oriented-database,C#,Db4o,Object Oriented Database,在Db4o中是否可以将新对象加载到持久化IObjectContainer中 我有一个桌面应用程序,它在启动时打开一个连接(IObjectContainer)。如果我使用以下命令查询所有对象: var objects = from DummyClass foo in session select foo 它完美地选择了所有对象。但是,如果另一个客户机在此之后添加新类,则同一查询仍会选择相同的对象,而不会选择新对象 我还知道: session.Ext().Refresh
var objects = from DummyClass foo in session
select foo
它完美地选择了所有对象。但是,如果另一个客户机在此之后添加新类,则同一查询仍会选择相同的对象,而不会选择新对象
我还知道:
session.Ext().Refresh(obj, int.MaxValue);
但我甚至都没有激活对新对象的引用,所以就没有了如何刷新新对象
请注意:我不想每次需要一些数据时都打开/关闭会话,我想利用OODB(透明激活、对象自加载以来的持久性等)
多谢各位
更新(为了更好地理解代码示例)
我需要像这样的东西:
// refresh all objects of DummyClass
session.Ext().Refresh(typeof(DummyClass), int.MaxValue);
您的客户机在存储数据后是否调用了commit()方法?否则,新数据将无法用于其他客户端。您可以使用提交的事件:
using Db4objects.Db4o;
using Db4objects.Db4o.Events;
using Db4objects.Db4o.IO;
using Db4objects.Db4o.Ext;
namespace PushedUpdates
{
class Program
{
static void Main()
{
var config = Db4oEmbedded.NewConfiguration();
config.File.Storage = new MemoryStorage();
var container = Db4oEmbedded.OpenFile(config, "IN-MEMORY");
var client = container.Ext().OpenSession();
var clientEvents = EventRegistryFactory.ForObjectContainer(client);
clientEvents.Committed += (s, a) =>
{
foreach(IObjectInfo added in a.Added)
{
System.Console.WriteLine(added.GetObject());
}
};
container.Store(new Item { Value = 1 } );
container.Commit();
container.Store(new Item { Value = 2 });
container.Commit();
container.Store(new Item { Value = 3 });
container.Commit();
client.Close();
container.Close();
}
}
class Item
{
public int Value { get; set; }
public override string ToString()
{
return "" + Value;
}
}
}
+1作为提示,但我担心性能。对于所有客户端上的每次提交,都会引发此事件
using Db4objects.Db4o;
using Db4objects.Db4o.Events;
using Db4objects.Db4o.IO;
using Db4objects.Db4o.Ext;
namespace PushedUpdates
{
class Program
{
static void Main()
{
var config = Db4oEmbedded.NewConfiguration();
config.File.Storage = new MemoryStorage();
var container = Db4oEmbedded.OpenFile(config, "IN-MEMORY");
var client = container.Ext().OpenSession();
var clientEvents = EventRegistryFactory.ForObjectContainer(client);
clientEvents.Committed += (s, a) =>
{
foreach(IObjectInfo added in a.Added)
{
System.Console.WriteLine(added.GetObject());
}
};
container.Store(new Item { Value = 1 } );
container.Commit();
container.Store(new Item { Value = 2 });
container.Commit();
container.Store(new Item { Value = 3 });
container.Commit();
client.Close();
container.Close();
}
}
class Item
{
public int Value { get; set; }
public override string ToString()
{
return "" + Value;
}
}
}