c# - Entity Framework 、预加载和大对象图

标签 c# wpf entity-framework eager-loading

我有一个 WPF 项目,它在带有项目的本地数据库上工作。本地数据库稍后与服务器同步。 每个项目都有多个系统,每个系统都有多个“标签”。标签有一个产品,该产品由多种 Material 组成,结构非常先进。一个简单的结构是这样的:

  • 项目
    • 系统
      • 标签
        • 产品
          • Material 1
          • Material 2
          • Material 3
        • 标签要求
      • 系统要求

我现在有两个问题必须解决。

  1. 当项目加载时,我需要从数据库加载整个项目并使用本地副本,直到用户保存它。当我尝试急切加载时,它会花很长时间,我发现你不应该有很多包含,因为它对性能不利。 我应该如何将深层结构加载到内存中,有什么好的做法吗?

  2. 我需要将其加载到内存中的原因是用户可以处理副本,然后在给定的时间点将其保存到数据库中。我有多个计算函数取决于树的不同部分。我的结论让我想到我需要将整个项目(或至少一个系统)发布到业务层,因为所有数据都可以在本地(内存)编辑

我是不是想错了?也许有一种方法可以将整个数据库(因为它不是那么大并且已经是本地的)加载到 memorydb 中并在 Entity Framework 中具有本地上下文。当用户保存时,我将其保存到真实数据库中,然后进行同步。

正如你所听到的,我不确定如何解决这个问题,所以欢迎任何提示

最佳答案

将 .Include 与 N:M 关系一起使用时, Entity Framework 执行左外连接,返回的行数可能比实际需要的多得多。

有一种技术可以更精确地加载对象图。它有很多编码而且非常丑陋,但可以提供更好的性能。详细描述了该技术(带示例)in this blog .

My technique is to query once per levels and then link the objects in your application.

This technique is automatic (lazy) in others ORM like NHibernate as the “batch loading” but in EntityFramework you have to do it manualy.

关于c# - Entity Framework 、预加载和大对象图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22808278/

相关文章:

asp.net - 启用代码优先 Entity Framework VS Web Express 2012

c# - EF CTP4 : "The context cannot be used while the model is being created."

xml - Entity Framework 查询 Xml

c# - 防止事件从一次操作中多次触发

c# - 将对话框置于窗口之上,但不置于所有内容之上

c# - 用户控件内的 WPF Scrollviewer 不显示垂直滚动条

使用 mvvm 模式的 WPF 数据绑定(bind)问题

c# - C++到C#的迁移,与指针相关

c# - 当与 ILMerge 或 SmartAssembly 等工具合并时,内部类是否会变为私有(private)类?

c# - 如何在 C# 中存储静态数据列表?