我正在使用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();
}
謝謝,這個工作,我發現,如果我只取回firstname屬性,它的工作沒有問題。這對我來說有一些懶惰的加載選項,或許它試圖從關係中獲取信息。 – 2012-01-07 16:58:42
我使用的解決方案是獲得我想要的列。因此它可能與延遲加載/加載有關。但文件似乎並沒有評論如何修改。感謝您的輸入。 – 2012-01-07 17:00:55