WPF DataGrid无法关闭DB(Matisse)连接



我使用带有.NET绑定的Matisse DB从数据库中提取对象并填充WPF数据网格。数据库为我生成了一个LINQ上下文,我可以使用它从数据库中检索对象。我正试图简单地将对象的内容绑定到WPF网格,这是我可以用ADO.NET/MySQL毫无问题地完成的。以下代码显示了我遇到的问题:

    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();将itemsource分配给我的数据网格后,它工作得很好!似乎即使在分配了itemssoource之后,它也会以某种方式缓存它,因此数据网格需要打开连接。我只有在使用wpf组件时才会得到这种行为,但所有控制台查询都能正常工作。我还尝试在foreach循环中进行迭代,并将每个Manager对象添加到数据网格的Items集合中,结果却出现了相同的异常。

我曾经尝试过以一种方式强制绑定,一次。曾试图扰乱交易。我甚至放了一个打开连接和关闭连接的按钮,并试图跟踪发生了什么,但如果项目源被分配,我根本无法关闭连接。

如果有人能帮忙,我将不胜感激。谢谢Mike

编辑:这似乎奏效了工作我使用的解决方案是只获取我想要的列。因此,它似乎与懒惰加载/急切加载有关。然而,该文件似乎没有对如何修改发表评论。感谢您的输入,我将使用这个:

    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();
    }

var linq=来自dc中的i。经理选择i.FirstName;

peopleGrid.ItemsSource=linq。ToList();

dc.Connection.Close();

相关内容

  • 没有找到相关文章

最新更新