6

我正在使用以下内容检索个人资料详细信息:

var profiles = connection.Query<Models.PROFILE>(
    "SELECT * FROM PROFILES WHERE ID=@ID", 
    new { ID = profileID }); // IEnumerable
var profile = profiles.First<Models.PROFILE>();

profile 对象包含其他集合,例如 profileImages。问题是每个子对象的项目计数为零。另外,我只想获取 profileImages 的数据。

是否需要设置一些东西来查询子对象,如果是,是否可以指定哪一个以及多少级别?

我也尝试过多重映射:

var profiles = connection.Query<Models.PHOTOS_PERMISSIONS,
                                Models.PROFILE,
                                Models.PHOTOS_PERMISSIONS>(sql,
                    (p1, p2) => { p1.ID = profileID; return p1; }, 
                    new { ID = profileID }, 
                    splitOn: "OWNER_PROFILESIDFK, ID").AsQueryable();

PHOTOS_PERMISSIONS.OWNER_PROFILESIDFK = PROFILE.ID

并得到以下错误:

使用多映射 API 时,如果您有除 Id 以外的键,请确保设置 splitOn 参数名称:splitOn

我已经尝试了我的 splitOn 文本中的内容的变体,但仍然得到相同的错误。

4

1 回答 1

9

Dapper 不支持开箱即用的一对多映射。看看这个问题,它可能会有所帮助。

多映射,一对多

如果您的 PROFILEIMAGES 表在 PROFILES ID 上有一个 FK - 您可以发出 2 个查询并使用 GridReader。

var sql = 
@"
select * from PROFILES where profileId= @id
select * from PROFILEIMAGES where OWNER_PROFILESIDFK = @id";

using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
{
   var profile = multi.Read<Models.PROFILE>().Single();
   profile.ProfileImages = multi.Read<Model.PROFILEIMAGES>().ToList();
} 
于 2012-04-20T08:25:07.130 回答