2010-01-24 86 views
0

我正在開發一個利用db4o作爲後端的電子商務網站。直到上週,我遇到了一個我一直無法解決的問題。下面的代碼非常簡單。我打開一個數據庫文件,保存一個對象,然後嘗試檢索它。但我沒有得到任何回報。 「用戶」變量的計數爲零。從db4o數據庫加載對象

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.我已經做了一些關於反射許可的閱讀,但我不知道這在這裏如何適用。任何幫助或想法將knidly讚賞。

+0

更新。我創建了一個新的控制檯應用程序項目,並將此代碼複製並粘貼到該項目中。我跑了應用程序,我也驚訝它工作得很好。它必須與項目設置有關,或者可能是dll的項目引用。 – user257768 2010-01-24 11:47:56

+0

我已經在VS 2008和.NET 3.5上運行了代碼。它在這裏很好。 您是否在這兩個項目中添加了「Db4objects.Db4o.NativeQueries.dll」程序集?當'Db4objects.Db4o.NativeQueries.dll'程序集存在時,上面的查詢將被優化,否則不會。因此是相當不同的。 – Gamlor 2010-01-24 14:18:15

+0

我設法複製了這個問題。它與命名空間有關。如果將項目屬性中的「程序集名稱」和「默認命名空間」設置爲簡單名稱(如「測試」),則代碼將正常工作。但是,如果您將其設置爲「Dukaan.Provider.db4o」,那麼該代碼不起作用。如果你能證實這一點會很好。謝謝。 P.S是我已經添加了這些程序集。 – user257768 2010-01-24 14:53:21

回答

0

調用store()之後,您需要在離開using {}語句之前提交()。您在提交更改之前關閉了數據庫。