【问题标题】:Why can't I read a db4o file created by a Java app in a C# app?为什么我无法在 C# 应用程序中读取由 Java 应用程序创建的 db4o 文件?
【发布时间】:2012-05-04 22:46:02
【问题描述】:

我有一个由 Java 应用程序生成的 db4o 数据库,我正在尝试使用 C# 应用程序读取它。

但是,当运行以下代码行时:

IObjectContainer db = Db4oEmbedded.OpenFile(@"..\..\..\Databases\people.db4o");

我收到以下错误:

无法转换类型的对象 'Db4objects.Db4o.Reflect.Generic.GenericObject' 键入 'Db4objects.Db4o.Ext.Db4oDatabase'。

有什么想法吗?我知道数据库中有包含 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();
            }
        }
    }
}

【问题讨论】:

    标签: c# java db4o


    【解决方案1】:

    引发此异常的最常见情况是 db4o 无法解析存储对象的类型。

    在您的情况下,db4o 未能读取其内部对象之一,这让我相信您没有将配置传递给 OpenFile() 方法(当然,您发布的代码没有调用 ConfigureAlias() 方法);

    请记住,从 8.0 版开始,不会对跨平台支持进行进一步改进(您可以阅读更多信息 details here)。

    【讨论】:

    • 谢谢。为什么你不应该在寒冷的夜晚编程的完美例子!我只是假设它更复杂,所以没有彻底检查我的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多