Dapper只能返回平面课程吗?

时间:2016-03-15 11:47:07

标签: entity-framework dapper

我是一个实体框架用户,将Dapper作为替代方案。在Entity Framework中,我能够执行此操作,它将填充我的Team对象以及每个对象中的玩家集合属性以及每个玩家内部的团队属性。

var players = context.Teams
.Include(x => x.Players)
.AsNoTracking()                                    
.Where(x => x.SportId == sportId).ToList();

我发现这是Dapper,但它似乎只返回一个没有团队数据的平面玩家对象。有没有办法让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 });

1 个答案:

答案 0 :(得分:1)

目前还没有内置。但有趣的是,在SQL中实际上并不是一个非常好的方法。最终,SQL数据是扁平的,因此,精巧的(与SQL非常接近)也相对平坦,这不应该是一个惊喜。

确实拥有您已找到的多地图内容。我也愿意在这里有一个更好的多网格阅读器来处理所需的聚合,但是...它不是一个简单的API来实现甚至设计,所以它还没有完成但仅仅因为它似乎并不是非常需要。

我怀疑如果你问EF它正在运行什么SQL,你会发现它非常低效。选择是n + 1(x级),或具有大量重复数据的超宽重复网格。