【发布时间】:2013-04-02 22:09:20
【问题描述】:
我有一个运行 .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。有一个issue on db4o's Jira 可能相关(或可能不相关)。
还有一个bug filed with an eerily similar stack trace。
使用Db4oEmbedded.OpenFile(Db4oConfiguration.Default(), path) 会导致此异常。如果我改用Db4oEmbedded.OpenFile(path),则不会引发异常,但恢复的数据中会丢失一些对象。
【问题讨论】: