首页 / C# / c# – 使用dapper和JOIN
c# – 使用dapper和JOIN
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 使用dapper和JOIN,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1825字,纯文字阅读大概需要3分钟。
内容图文
![c# – 使用dapper和JOIN](/upload/InfoBanner/zyjiaocheng/790/1833f9d00b854b7fb1673aa7a9c370fe.jpg)
我有一个查询与许多连接,如:
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映射到实体?
解决方法:
Dapper并不关心你的连接,Dapper所关心的是表格结构.框架默认使用id列,或者使用自定义SplitOn将表格结构解析为对象.所以表格式结构如下:
Tabular:
Id | A | Id | B | Id | C | Id | D | Id | E | Id | F | Id | G | Id | H
你告诉Dapper存在八个实体,Dapper通过id列执行此操作.现在,如果您有一个实体但不需要以这种方式进行抽象,例如A,B和C应该在一个实体中,那么您可以通过生成以下内容告诉Dapper不为它们创建单独的实体结构体.
Tabular:
Id | A | B | C | Id | D | Id | E | Id | F | Id | G | Id | H
我要点是一个实体不应该代表一个表,而是一个代表你意图的对象.例如,用户可能有地址信息,但在数据库中,他们可能是单独的表,但在您的应用程序中,它们可能是一个对象.
根据数据表,我假设您可以合并一对,而不会失去业务意图.哪个基于拆分可以解决您的问题,否则我不确定您将如何超过Dapper内置的七个拆分功能.
内容总结
以上是互联网集市为您收集整理的c# – 使用dapper和JOIN全部内容,希望文章能够帮你解决c# – 使用dapper和JOIN所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。