0

バックエンドとして db4o を利用する e コマース Web サイトを開発しています。先週解決できなかった問題に遭遇するまでは、すべて順調でした。以下のコードは非常に単純です。データベース ファイルを開き、オブジェクトを保存してから、それを取得しようとします。しかし、私は何も返されません。「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 ベータ版、および Windows 7 を使用しています。リフレクションの許可についていくつか読んだことがありますが、これがここでどのように適用されるかわかりません。どんな助けやアイデアも親切に感謝します。

4

1 に答える 1

0

store()を呼び出した後、using {}ステートメントを終了する前にcommit()を実行する必要があります。変更をコミットする前にデータベースを閉じました。

于 2011-04-13T18:11:18.460 に答える