我目前正在使用Entity Framework进行数据库访问,但想看看Dapper。我有这样的课程:
public class Course{
public string Title{get;set;}
public IList<Location> Locations {get;set;}
...
}
public class Location{
public string Name {get;set;}
...
}
因此,可以在多个位置教授一门课程。Entity Framework为我执行了映射,因此我的Course对象中填充了位置列表。我将如何使用Dapper做到这一点,甚至有可能还是我必须在几个查询步骤中做到这一点?
Dapper不是一个成熟的ORM,它不能处理神奇的查询等问题。
对于您的特定示例,以下可能会起作用:
var courses = cnn.Query<Course>("select * from Courses where Category = 1 Order by CreationDate");
var mappings = cnn.Query<CourseLocation>(
"select * from CourseLocations where CourseId in @Ids",
new {Ids = courses.Select(c => c.Id).Distinct()});
var locations = cnn.Query<Location>(
"select * from Locations where Id in @Ids",
new {Ids = mappings.Select(m => m.LocationId).Distinct()}
);
将其留给读者,您将创建一些地图,并遍历课程中的各个位置。
请注意,in
如果您的查询少于2100个(Sql Server),则该技巧将起作用,如果查询次数更多,则可能需要将查询修改select * from CourseLocations where CourseId in (select Id from Courses ... )
为在这种情况下,您也可以一次使用提取所有结果QueryMultiple
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句