.net - 如何从 SQL Server 加载巨大的聚合(40+表,500+列)?

标签 .net sql-server entity-framework orm domain-driven-design

给定

使用 SQL Server 和 Entity Framework 进行数据访问的企业 Web 应用程序。

域模型是一个金融对象层次结构,包含大约 40 多个对象(在 40 多个表中,500 多个列中),所有这些对象一起构成一个聚合(如 DDD 中)。

问题

我需要立即加载整个聚合。根对象和所有子对象、孙子对象、曾孙对象等(深度约为5或6)

我没有找到任何方法来使用 Entity Framework 有效加载聚合。

我尝试过的选项:

  1. 显式加载 - 调用次数过多

  2. 预加载 - 它生成的 SQL 非常丑陋,并且没有针对如此大的聚合进行优化,因此我认为使用数百个调用进行显式加载会更快

  3. 多个结果集存储过程+objectContext.Translate。可行的选择。但是,当将结果映射到实体时,DataAnnotation 会被忽略(并且我们对数据库中的列使用 underscore_casing),从而导致大量重复 - 存储过程返回的每一列都需要有一个正确的别名。

问题

有人可以建议什么是最有效、最干净的方式来加载聚合吗?

加载时间应该是毫秒,而不是秒。至于平均对象大小 - 聚合序列化为 JSON 通常低于 100 KB。

有什么框架/微 ORM 可以提供帮助吗?

最佳答案

您将不得不重新考虑您的聚合,因为它实际上不应该那么大。

似乎所有的 table 和其他移动部件绝对必须在一起,但在大多数情况下,事实并非如此。 ORM 生成的对象内的导航可能会让您相信它们属于在一起。

关于.net - 如何从 SQL Server 加载巨大的聚合(40+表,500+列)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38341052/

相关文章:

c# - Entity Framework : many to many relationship tables

c# - 如何检查文件是否在 C# 中使用?

c# - nhibernate 从 Fluent 映射到通过代码映射

.net - 正则表达式 - 模式捕获除模式 [.net] 之外的所有内容

c# - 如何从 EventInfo 中获取委托(delegate)对象?

sql-server - 需要一个 SQL Server 函数将本地日期时间转换为支持 DST 的 UTC

c# - 返回 LINQ 查询和 INSERT 数据

SQL Server 2008 使用 WHILE 循环插入

entity-framework - 更改表和列名称映射 Entity Framework v4.3

c# - 重用 LINQ 选择功能