How to get values for child objects using Dapper ORM?

南笙酒味 提交于 2020-01-02 04:50:50

问题


I am retrieving profile details with the following:

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

The profile object contains other collections like profileImages. The problem is that the item count for every child object is zero. Also I only want to get data for say, profileImages.

Is there something that needs to be set to query the child objects, and if so, is it possible to specify which one and for how many levels?

I have also tried multimapping:

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

And getting the following error:

When using the multi-mapping APIs ensure you set the splitOn param if you have keys other than Id Parameter name: splitOn

I have tried variations of what's in my splitOn text, but still get the same error.


回答1:


Dapper doesn't support a One-To-Many mapping like this out of the box. Check out this question, it may help though.

Multi-Mapping, one-to-many

If your PROFILEIMAGES table has a FK on PROFILES ID - you could issue 2 querys and use the 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();
} 


来源:https://stackoverflow.com/questions/10235750/how-to-get-values-for-child-objects-using-dapper-orm

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!