【发布时间】:2014-02-19 18:05:57
【问题描述】:
我有一个中等大小的 CodeFirst 应用程序,它是使用相当严格的 MVVM 编写的(它有一个 C#/WPF 前端和 CodeFirst 到 MS SQL Server 后端)。
我在模型中编写了许多帮助类,它们创建 DbContext、加载对象等。我曾经通过为每个线程(在静态函数中)生成单个 DbContext 并从适当的加载函数(Person.Load() 将调用 GetDbContext)获取该引用来做到这一点。这与延迟加载一起工作得非常好。
由于每个线程使用单个 DbContext,我的代码中出现了一些错误,因此决定切换到每个工作单元单个 DbContext 的更好做法,在“使用”中加载代码' 陈述。现实世界的速度差异似乎可以忽略不计。
我现在的问题是延迟加载之一。因为当访问“Person”上的属性时,DbContext 不再存在,“自动”延迟加载不会发生。
解决此问题的最佳方法是什么?当访问这些属性之一时,我可以在我的 ViewModel 中手动调用模型,但我最终会在任何地方调用模型并手动执行应该在幕后发生的事情。这也意味着事情似乎不太协调——我最终得到了分离的 POCO,而且当我最初每个线程使用一个 DbContext 时,这似乎更加混乱!数据库的规范化结构确实意味着存在大量此类关系。
另一种(非常消耗资源)方法可能是为每个加载的对象存储一个 DbContext,以便延迟加载仍然有效...
提前感谢您的任何建议。 亚当
【问题讨论】:
标签: c# entity-framework optimization mvvm code-first