How to get values for child objects using Dapper ORM?

c#-4.0 dapper orm

Question

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.

Accepted Answer

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();
} 



Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Is this KB legal? Yes, learn why
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Is this KB legal? Yes, learn why