【发布时间】:2019-08-10 08:15:54
【问题描述】:
我有一个包含多个连接的查询,例如:
var sqlFindByProviderNameAndProviderSubjectId = $@"
SELECT u.*, la.*, p.*, cp.*, scr.*, lm.*, wm.*
FROM [user].[User] u
LEFT JOIN [user].[LinkedAccount] la ON u.Id = la.UserId
LEFT JOIN [user].[PatientProfile] p ON u.Id = p.UserId
LEFT JOIN [user].[CareProviderProfile] cp ON u.Id = cp.UserId
LEFT JOIN [user].[Screening] scr ON u.Id = scr.UserId
LEFT JOIN [user].[LengthMeasurement] lm ON scr.Id = lm.ScreeningId
LEFT JOIN [user].[WeightMeasurement] wm ON scr.Id = wm.ScreeningId
WHERE u.Id = (
SELECT UserId
FROM [user].[LinkedAccount] la
WHERE la.ProviderName = @ProviderName AND la.ProviderSubjectId = @ProviderSubjectId)";
我使用 dapper 将表格非实体化为强类型实体,例如:
await UnitOfWork.Connection.QueryAsync<User, LinkedAccount, PatientProfile, CareProviderProfile, Screening, LengthMeasurement, WeightMeasurement, User>(query,
(u, la, p, cp, scr, lm, wm) =>
{
// mapping code here
}
这很好用。
但是,我必须向查询中添加一个额外的 JOIN,但不幸的是 QueryAsync 最多需要 7 个参数/类型,而且我还有更多。
还有其他方法可以将多个表从 JOIN 映射到实体吗?
【问题讨论】:
-
除非您执行以下方法,否则您必须单独调用以构建该实体结构,然后在代码中关联到父实体。多重映射只嵌套到七个。
标签: c# sql join asp.net-core dapper