gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:45:48 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com