我想在我的WPF应用程序中公开一个导航窗格,它显示了我的数据库中的所有不同对象,每个对象都有子对象。每个孩子可以有额外的孩子,并且可以有任意数量的水平(实际上这可能会限制在5个级别)。
为了加载这些项目及其相关的孩子,我尝试了这种方法:
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;
}
}
}
上述每个项目都会有孩子(可能有更多孩子),如上所述。正如您可以想象的那样,上面的代码并没有起作用,并且我已经处理了&#34;上下文。我尝试在WPF前端扩展NavigationTree时出现异常。如何在导航树中公开这些属性,以便每次用户在NavigationTree中展开项目(或项目子项)时加载它们?
理想情况下,我希望此链接为“直播”,即,当数据库中进行更改时,它们会显示在此NavigationTree中(该应用将支持多个用户,同时在同一个数据库中处理同一项目/不同项目)。
这是单例Context()实例的用例吗?
答案 0 :(得分:0)
作为此错误的快速解决方案,请尝试使用ObservableCollection构造函数而不是分配。在构造函数中,它会将所有元素复制到新集合,因此您的视图模型将独立于DbContext:
int[] id = new int[0];
要决定如何在您的应用程序中使用DbContext,请查看一篇非常好的文章:Managing DbContext the right way with Entity Framework 6: an in-depth guide。
主要思想是将DbContext保持在业务事务范围内。作者提供了特殊的DbContextScope类来定义可以使用DbContext的业务事务边界。