c# - 如何构造返回递归外键关系的实体框架查询
问题描述
假设我有一张桌子Product
CREATE TABLE Product
(
Id INT PRIMARY KEY,
Name VARCHAR(100) NOT NULL,
PersonId INT FOREIGN KEY REFERENCES Person(Id)
)
CREATE TABLE Person
(
Id INT PRIMARY KEY,
FirstName VARCHAR(100) NOT NULL,
LastName VARCHAR(100) NOT NULL,
SupervisorId INT FOREIGN KEY REFERENCES Person(Id)
)
Person
是引用自身的表的一个相当普通的示例。
假设我想查询我的Product
表并使用相关产品信息填充一个类,以及关于该产品的命令链中每个人的 ID、姓名和主管。
假设我天真地编写了以下 C#(假设我也在使用 AutoMapper):
var dbQuery = context.Products;
var entities = dbQuery.ToArray();
var products = Mapper.Map(entities);
只要产品数量很少,这将可以正常工作。这是因为 Entity Framework 最初只会查询Product
表,并且只会在查询到 Person 实体时填写它们。在这里使用 AutoMapper 之类的东西本质上就像在循环中执行 SQL,并且当其中的行数Product
变大时会导致性能问题。
所以假设相反,我写这个:
var dbQuery = context.Products.Include(x => x.Person);
var entities = dbQuery.ToArray();
var products = Mapper.Map(entities);
现在,我将与 in 中的Person
行关联的第一行包括在内Product
,但这仍然存在问题,因为每个 Person 都有一个或多个要查询的主管。
有什么方法可以告诉 Entity Framework 递归查询我的数据库,以便我获得与单个产品关联的人员和主管的整个命令链,以便当 AutoMapper 尝试将这些映射到我的类时,不需要新的查询?
解决方案
推荐阅读
- c++ - VS Code 无法进入链接库项目
- reactjs - 如何获取当前滚动的元素键 - React PDF
- php - 保护操作数据库的发布请求
- javascript - 如何将不同的项目数组正确加载到 vuetify 的 v-data-iterator 中?
- python - python字符串匹配使用recordlinkage - 为特定情况编写规则的可能性
- java - 使用多个 UI 线程运行 java 应用程序
- excel - Excel 宏用新数据更新文件中的行
- html - 表中的 DIV 不会像应有的那样伸展
- mongodb - Mac 上的 Mongod 中止
- python - 多变量回归 statsmodels.api