2012-01-07 69 views
0

我正在使用Matisse DB和.NET綁定從數據庫中獲取對象並填充WPF數據網格。數據庫生成了一個LINQ上下文,我可以用它從數據庫中檢索對象。我試圖簡單地將對象的內容綁定到WPF網格,這是我可以用ADO.NET/MySQL完成的,沒有任何問題。以下代碼顯示了我擁有的問題:WPF DataGrid無法關閉DB(Matisse)連接

private void displayManagersConsole() 
    { 
     //This Works, prints out to console 
     conn.Open(); 
     LinqExample linq = new LinqExample(conn); 
     var query = (from m in linq.Managers select m); 
     foreach (var manager in query) 
     { 
      Console.WriteLine(manager.FirstName); 
     } 
     conn.Close(); 
    } 

    private void displayManagersWPF() 
    { 
     //This fails 
     conn.Open(); 
     LinqExample linq = new LinqExample(conn); 
     peopleGrid.ItemsSource = linq.Managers; 
     conn.Close(); 
    } 

正如您所看到的,我有兩種方法。第一種方法打開連接,從對象獲取信息,然後關閉連接。這工作沒有問題,連接關閉罰款。然而,當我嘗試第二種方法,它拋出以下異常:

MATISSE-E-NOTRANORVERSION, Attempted to access objects without a transaction or version access 

我已經通過文件廣泛閱讀並不能說明這一點。奇怪的是,如果我刪除了conn.Close();將itemssource分配給我的數據網格後,它工作正常!看起來,即使在itemssource被分配後,它也會以某種方式緩存它,這樣datagrid需要連接才能打開。我僅在使用wpf組件時纔會出現此行爲,但所有控制檯查詢均可正常工作。我也試着在foreach循環中迭代,並將每個Manager對象添加到數據網格的Items集合中,以獲得相同的異常。

我嘗試強制綁定作爲一種方式,一次。曾嘗試搞亂交易。我甚至在連接打開和連接關閉按鈕,並試圖跟隨發生的事情,但我只是無法關閉連接,如果itemssource分配。

如果有人可以幫忙,會非常感激。 謝謝, 邁克

編輯:這似乎是工作 工作 我以前是隻得到我想要的列中的解決方案。因此它可能與延遲加載/加載有關。但文件似乎並沒有評論如何修改。感謝您的輸入,我將使用:

private void displayManagersWPF() 
    { 
     conn.Open(); 
     conn.StartTransaction(); 
     Example db = new Example(conn); 
     peopleGrid.ItemsSource = (from m in db.Managers 
            select new 
             { 
              m.FirstName, 
              m.LastName, 
              m.Title 
             } 
           ); 
     conn.Close(); 
    } 

回答

1

var linq = from i in dc.Managers select i.FirstName;

peopleGrid.ItemsSource = linq.ToList();

dc.Connection.Close();

+0

謝謝,這個工作,我發現,如果我只取回firstname屬性,它的工作沒有問題。這對我來說有一些懶惰的加載選項,或許它試圖從關係中獲取信息。 – 2012-01-07 16:58:42

+0

我使用的解決方案是獲得我想要的列。因此它可能與延遲加載/加載有關。但文件似乎並沒有評論如何修改。感謝您的輸入。 – 2012-01-07 17:00:55