首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实体框架:全球导航树

实体框架:全球导航树
EN

Stack Overflow用户
提问于 2015-11-25 11:04:12
回答 1查看 69关注 0票数 0

我想在我的WPF应用程序中公开一个导航窗格,它显示数据库中的所有不同对象,每个对象都有子对象。每个孩子都可以有更多的孩子,并且可以有任意数量的级别(在实践中,这很可能限制在5个级别)。

为了加载这些项目及其相关的子项目,我尝试了以下方法:

代码语言:javascript
运行
复制
public class DataModel
{
    public ObservableCollection<Project> Projects {get;set;} //Will implement INotifyPropertyChanged here

    public void LoadAllProjects()
    {
        using (var context = new Context())
        {
            context.Projects.Load();
            this.Projects = context.Projects;
        }                
    }
}

如上所述,上面的每个项目都会有子项目(可能有更多的子项目)。可以想象,当我试图在WPF前端展开NavigationTree时,上面的代码不起作用,并给出了“上下文已被释放”的异常。如何在导航树中公开这些属性,以便每当用户在NavigationTree中展开项目(或子项目)时加载这些属性?

理想情况下,我希望这个链接是“实时的”,也就是说,当在数据库中进行更改时,它们会显示在这个NavigationTree中(该应用程序将支持多个用户,他们可以同时在同一个数据库中处理同一个项目/不同的项目)。

这是单例上下文()实例的用例吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-25 12:27:23

作为解决此错误的快速解决方案,尝试使用ObservableCollection构造函数而不是分配。在构造函数中,它将将所有元素复制到新集合中,因此视图模型将独立于DbContext:

代码语言:javascript
运行
复制
this.Projects = new ObservableCollection(context.Projects);

要决定如何在应用程序中使用DbContext,请看一篇非常好的文章:使用实体框架6正确地管理DbContext :深度指南

其主要思想是在业务事务范围内保持DbContext活动。作者还提供了特殊的DbContextScope类来定义可以使用DbContext的业务事务边界。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33914861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档