为什么我无法在 C# 应用程序中读取由 Java 应用程序创建的 db4o 文件
本文关键字:应用程序 Java 创建 文件 db4o 读取 为什么 | 更新日期: 2023-09-27 18:33:10
我有一个由 Java 应用程序生成的 db4o 数据库,我正在尝试使用 C# 应用程序读取它。
但是,在运行以下代码行时:
IObjectContainer db = Db4oEmbedded.OpenFile(@"..'..'..'Databases'people.db4o");
我收到以下错误:
无法强制转换类型的对象 "Db4objects.Db4o.Reflect.Generic.GenericObject"键入 'Db4objects.Db4o.Ext.Db4oDatabase'.
有什么想法吗?我知道数据库中有一些 person 对象包含 personId 字段(以及其他字段)。我使用的是 db4o 版本 8。我不确定用于生成数据库的版本。
整个程序是:
using System;
using System.Collections.Generic;
using System.Linq;
using Db4objects.Db4o;
using Db4objects.Db4o.Config;
using MyCompany.Domain;
namespace MyCompany.Anonymizer
{
internal class Program
{
// Private methods.
private static IEmbeddedConfiguration ConfigureAlias()
{
IEmbeddedConfiguration configuration = Db4oEmbedded.NewConfiguration();
configuration.Common.AddAlias(new TypeAlias("com.theircompany.Person", "MyCompany.Domain.Person, MyCompany.Domain"));
configuration.Common.Add(new JavaSupport());
return configuration;
}
private static void Main(string[] args)
{
IObjectContainer db = Db4oEmbedded.OpenFile(@"..'..'..'Databases'people.db4o");
try
{
IList<Person> result = db.Query<Person>();
for (int i = 0; i < result.Count; i++)
{
Person person = result[i];
Console.WriteLine(string.Format("Person ID: {0}", person.personId));
}
}
finally
{
db.Close();
}
}
}
}
抛出此异常的最常见情况是 db4o 无法解析存储对象的类型。
在您的情况下,db4o 无法读取其内部对象之一,这使我相信您尚未将配置传递给 OpenFile() 方法(当然,您发布的代码没有调用 ConfigureAlias() 方法);
请记住,从版本 8.0 开始,不会对跨平台支持进行进一步改进(您可以在此处阅读更多详细信息)。