Dapper只能return平类吗?
Can Dapper only return flat classes?
我是一名 Entity Framework 用户,正在寻找 Dapper 作为替代方案。在 Entity Framework 中,我能够做到这一点,它会填充我的团队对象和玩家集合 属性 以及每个玩家中的团队 属性。
var players = context.Teams
.Include(x => x.Players)
.AsNoTracking()
.Where(x => x.SportId == sportId).ToList();
我发现这是 Dapper,但它似乎 return 一个完全没有团队数据的扁平玩家对象。有没有办法让 Dapper 做 EF 做的事情?如果有,怎么做?
var players = conn.Query<PlayerDTO, TeamDTO, PlayerDTO>("SELECT p.Id,
p.FirstName, p.LastName, p.DateOfBirth, p.TeamId, t.Id as TeamId, t.Name,
t.SportId FROM Team t "+ "INNER JOIN Player p ON t.Id = p.TeamId WHERE
t.SportId = @ID", (player, team) => { return player; }, splitOn: "TeamId",
param: new { ID = sportId });
目前还没有内置。但对我来说有趣的是,在 SQL 中实际上也没有很好的方法来做到这一点。最终,SQL 数据是平坦的,所以 dapper(非常接近 SQL)也相对平坦也就不足为奇了。
它确实具有您找到的多地图内容。我也愿意接受更好的多网格 reader 在这里处理所需聚合的可能性,但是......实现甚至设计都不是一件小事 API,所以还没有完成只是因为它似乎没有被大量需求。
我怀疑如果你问 EF SQL 是什么 运行,你会发现它效率很低。选择是 n+1(x 级),或具有大量重复数据的超宽重复网格。
我是一名 Entity Framework 用户,正在寻找 Dapper 作为替代方案。在 Entity Framework 中,我能够做到这一点,它会填充我的团队对象和玩家集合 属性 以及每个玩家中的团队 属性。
var players = context.Teams
.Include(x => x.Players)
.AsNoTracking()
.Where(x => x.SportId == sportId).ToList();
我发现这是 Dapper,但它似乎 return 一个完全没有团队数据的扁平玩家对象。有没有办法让 Dapper 做 EF 做的事情?如果有,怎么做?
var players = conn.Query<PlayerDTO, TeamDTO, PlayerDTO>("SELECT p.Id,
p.FirstName, p.LastName, p.DateOfBirth, p.TeamId, t.Id as TeamId, t.Name,
t.SportId FROM Team t "+ "INNER JOIN Player p ON t.Id = p.TeamId WHERE
t.SportId = @ID", (player, team) => { return player; }, splitOn: "TeamId",
param: new { ID = sportId });
目前还没有内置。但对我来说有趣的是,在 SQL 中实际上也没有很好的方法来做到这一点。最终,SQL 数据是平坦的,所以 dapper(非常接近 SQL)也相对平坦也就不足为奇了。
它确实具有您找到的多地图内容。我也愿意接受更好的多网格 reader 在这里处理所需聚合的可能性,但是......实现甚至设计都不是一件小事 API,所以还没有完成只是因为它似乎没有被大量需求。
我怀疑如果你问 EF SQL 是什么 运行,你会发现它效率很低。选择是 n+1(x 级),或具有大量重复数据的超宽重复网格。