这是我考虑使用DB4o的方式.当我需要查询时,我会打开文件,阅读并关闭:
using (IObjectContainer db = Db4oFactory.OpenFile(Db4oFactory.NewConfiguration(), YapFileName))
{
try
{
List<Pilot> pilots = db.Query<Pilot>().ToList<Pilot>();
}
finally
{
try { db.Close(); }
catch (Exception) { };
}
}
Run Code Online (Sandbox Code Playgroud)
稍后,当我需要插入时,那么
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) { };
}
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我认为只要在需要时将文件打开,我就会保持文件更整洁,并且大部分时间都关闭它.但我一直得到InvalidCastException
Unable to cast object of type 'Db4objects.Db4o.Reflect.Generic.GenericObject' to type 'Pilot'
Run Code Online (Sandbox Code Playgroud)
使用DB4o的正确方法是什么?
不,以这种方式工作不是一个好主意.db4o ObjectContainers旨在在应用程序运行时保持打开状态.有几个原因:
您不必担心持续打开数据库文件.db4o的关键目标之一是(移动)设备中的嵌入式使用.这就是为什么我们以这样的方式编写db4o,即使文件仍处于打开状态,您也可以随时关闭计算机而不会有数据库损坏的风险.
您获得GenericObject而不是Pilot对象的可能原因: