Почему я не могу прочитать файл db4o, созданный приложением Java, в приложении C#?
У меня есть база данных db4o, созданная приложением Java, и я пытаюсь прочитать ее с помощью приложения 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();
}
}
}
}
1 ответ
Наиболее распространенный сценарий, в котором генерируется это исключение, - это когда db4o не может разрешить тип хранимого объекта.
В вашем случае db4o не может прочитать один из своих внутренних объектов, из-за чего я полагаю, что вы не передали конфигурацию методу OpenFile() (конечно, опубликованный вами код не вызывает метод ConfigureAlias ());
Имейте в виду, что начиная с версии 8.0 дальнейших улучшений в отношении кроссплатформенной поддержки не будет (вы можете прочитать более подробную информацию здесь).