我有一个运行 .net 4.0 的服务器,它正在创建一个 db4o 数据库并将其发送到客户端。客户端运行.net 3.5,无法打开数据库(这曾经在服务器也是3.5时工作)。
客户端抛出一个Db4oIOException
堆栈跟踪,如下所示:
at Db4objects.Db4o.IO.ReadOnlyBin.Write(Int64 position, Byte[] bytes, Int32 bytesToWrite)
at Db4objects.Db4o.IO.BinDecorator.Write(Int64 position, Byte[] bytes, Int32 bytesToWrite)
at Db4objects.Db4o.IO.BlockAwareBin.BlockWrite(Int32 address, Int32 offset, Byte[] bytes, Int32 length)
at Db4objects.Db4o.Internal.IoAdaptedObjectContainer.WriteBytes(ByteArrayBuffer buffer, Int32 blockedAddress, Int32 addressOffset)
at Db4objects.Db4o.Internal.LocalObjectContainer.WritePointer(Int32 id, Slot slot)
at Db4objects.Db4o.Internal.LocalObjectContainer.AllocatePointerSlot()
at Db4objects.Db4o.Internal.Ids.PointerBasedIdSystem.NewId()
at Db4objects.Db4o.Internal.Ids.TransactionalIdSystemImpl.AcquireId()
at Db4objects.Db4o.Internal.Ids.TransactionalIdSystemImpl.NewId(SlotChangeFactory slotChangeFactory)
at Db4objects.Db4o.Internal.PersistentBase.Write(Transaction trans)
...
关于如何以兼容格式保存数据库或无错误加载的任何想法?
附加信息
我似乎没有存储任何 .net 4.0 特定数据。在 LINQPad 中打开数据库并浏览它只显示我自己的自定义类(它们都是在 3.5 下构建的)。
似乎 db4o 试图写入的对象/类型是System.Reflection.Cache.InternalCache
. db4o 的 Jira 上存在一个可能相关(或可能不相关)的问题。
还有一个带有异常相似堆栈跟踪的错误。
使用Db4oEmbedded.OpenFile(Db4oConfiguration.Default(), path)
会导致此异常。如果我Db4oEmbedded.OpenFile(path)
改为使用,则不会引发异常,但恢复的数据中会丢失一些对象。