这就是我正在考虑使用DB4o的方式。当我需要查询时,我将打开文件,阅读并关闭:
using (IObjectContainer db = Db4oFactory.OpenFile(Db4oFactory.NewConfiguration(), YapFileName))
{
try
{
List<Pilot> pilots = db.Query<Pilot>().ToList<Pilot>();
}
finally
{
try { db.Close(); }
catch (Exception) { };
}
}
稍后,当我需要插入时,
using (IObjectContainer db = Db4oFactory.OpenFile(Db4oFactory.NewConfiguration(), YapFileName))
{
try
{
Pilot pilot1 = new Pilot("Michael Schumacher", 100);
db.Store(pilot1);
}
finally
{
try { db.Close(); }
catch (Exception) { };
}
}
这样,我想我将通过仅在需要时打开它并在大多数时间关闭它来保持文件整洁。但是我不断收到InvalidCastException
Unable to cast object of type 'Db4objects.Db4o.Reflect.Generic.GenericObject' to type 'Pilot'
使用DB4o的正确方法是什么?
最佳答案
不,以这种方式工作不是一个好主意。 db4o ObjectContainers旨在始终在您的应用程序运行时保持打开状态。有两个原因:
您无需担心会不断拥有一个打开的数据库文件。 db4o的主要目标之一是在(移动)设备中的嵌入式使用。这就是为什么我们以这样的方式编写db4o的原因:即使文件仍处于打开状态,您也可以随时关闭计算机而不会冒数据库损坏的风险。
为什么要取回GenericObject而不是Pilot对象的可能原因:
关于db4o - 是否可以打开DB4o文件进行多次查询,插入,更新?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2998794/