【问题标题】:Loading an object from a db4o database从 db4o 数据库加载对象
【发布时间】:2011-04-14 02:11:18
【问题描述】:

我正在开发一个使用 db4o 作为后端的电子商务网站。一切都很好,直到上周我遇到了一个我无法解决的问题。下面的代码非常简单。我打开一个数据库文件,保存一个对象,然后尝试检索它。但是我什么也没得到。 “users”变量的计数为零。

public class Program
{
    private static string _connectionString = string.Format(@"c:\aaarrrr.db4o");

    static void Main(string[] args)
    {
        TestUser container = new TestUser() { id = 1, Name = "Mohammad", Surname = "Rafiq" };

        Db4oFactory.Configure().Diagnostic().AddListener(new DiagnosticToConsole());

        using (var dbc = Db4oFactory.OpenFile(_connectionString))
        {
            dbc.Store(container);
        }

        IList<TestUser> users = null;

        using (var dbc = Db4oFactory.OpenFile(_connectionString))
        {
            users = dbc.Query<TestUser>(x => x.id == 1).ToList();
        }

        if (users.Count > 0)
        {
            Console.WriteLine("{0} {1} with id of {2}", users.First().Name, users.First().Surname, users.First().id);
        }
        else
        {
            Console.WriteLine("\nNo data returned.");
        }

        Console.ReadLine();
    }
}

public class TestUser
{
    [Indexed]
    private int _id = 0;
    private string _name = string.Empty;
    private string _surname = string.Empty;

    public int id { get { return _id; } set { _id = value; } }
    public string Name { get { return _name; } set { _name = value; } }
    public string Surname { get { return _surname; } set { _surname = value; } }
}

我已附加 db4o 诊断侦听器,但在控制台输出中看不到任何内容。一切似乎都很好。我知道我正在写入文件,因为我可以看到文件大小增加并且时间戳也更新了。我检查了所有项目设置,它们都设置为默认值。我正在使用 .net 4、visual studio 2010 beta 和 windows 7。我已经阅读了一些关于反射许可的内容,但我看不出这如何适用于此。任何帮助或想法将不胜感激。

【问题讨论】:

  • 更新。我创建了一个新的控制台应用程序项目,并将此代码复制并粘贴到该项目中。我运行了该应用程序,令我惊讶的是它运行良好。它必须与项目设置有关,或者可能与 dll 的项目引用有关。
  • 我已经在 VS 2008 和 .NET 3.5 上运行了代码。它在这里工作正常。您是否在两个项目中都添加了“Db4objects.Db4o.NativeQueries.dll”程序集?当存在“Db4objects.Db4o.NativeQueries.dll”程序集时,将优化上述查询,否则不会。因此有很大的不同。
  • 我已经成功地复制了这个问题。它与命名空间有关。如果您将项目属性中的“程序集名称”和“默认命名空间”设置为简单的名称,例如“测试”,则代码可以正常工作。但是,如果您将其设置为“Dukaan.Provider.db4o”,则代码不起作用。如果您能确认这一点,那就太好了。谢谢你。 P.S 是的,我已经添加了这些程序集。
  • 问题在于程序集名称,而不是默认命名空间。
  • 它不适用于命名空间 'Dukaan.Provider.db4o' 对吗?这可能是由于这个错误:tracker.db4o.com/browse/COR-1798 但是这个错误应该在当前的 7.12 版本中得到修复。你用的是哪个版本?

标签: object loading db4o permissions


【解决方案1】:

在调用 store() 之后,您需要在离开 using{} 语句之前 commit()。您在提交更改之前关闭了数据库。

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 2011-01-26
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2015-09-11
    相关资源
    最近更新 更多