我已经建立了一个db4o服务器和客户端。我的客户呼叫不起作用。客户端如何查询db4o服务器?
令我感到困惑的是,db4o示例显示了客户端如何关闭服务器,但不知道如何获取和保存数据。请参阅:http://community.versant.com/Documentation/Reference/db4o-7.12/java/reference/Content/client-server/networked/simple_db4o_server.htm
如果我启动db4o服务器并运行netstat,则可以看到端口已打开。在客户端上,我可以这样做:
Debug.WriteLine(db.Ext()。IsClosed()。ToString());
并且返回False,这很好。
但是,当我尝试获取或保存数据时,它不起作用。在保存数据时,它似乎可行,但我在数据库中看不到数据。试图检索该对象时,出现此错误:
Db4objects.Db4o.Ext.Db4oException:抛出了类型为'Db4objects.Db4o.Ext.Db4oException'的异常。 ---> System.ArgumentException:类型'Db4objects.Db4o.Internal.Query.DelegateEnvelope'上定义的字段'_delegateType'不是类型为'Db4objects.Db4o.Reflect.Generic.GenericObject'的目标对象上的字段。
下面是客户端调用保存,然后得到:
Server server = new Server() { Name = "AppServerFoo" };
IObjectContainer db = GetDatabase();
db.Store(server);
db.Close();
这里是在GetDatabase唯一的线()方法:
return Db4oClientServer.OpenClient(Db4oClientServer.NewClientConfiguration(), "DellXps", 8484, "user", "password");
而这里的呼叫从DB获得:
IObjectContainer db = GetDatabase();
Server testServer = db.Query<Server>(server => server.Name == "AppServerFoo").FirstOrDefault();
db.Close();
我错过了什么?
这个方法对我来说有两个小问题。我是一个纯粹主义者,我认为不得不在数据库服务器上部署我的程序集。也许这是因为我不习惯于MS SQL Server。或者,也许是因为我正在考虑进行部署。另外,我不想改变我的编码风格(lambda优先于linq),因为选择了持久性存储。说了这么多,OODB对我来说是新的,所以我现在只需用DB部署这些实体,并随着时间的推移找到我自己的方式。谢谢! –