How with Dapper I can get values for child objects?

c#-4.0 dapper orm


I am retrieving profile details with the following:

var profiles = connection.Query<Models.PROFILE>(
    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,
                    (p1, p2) => { p1.ID = profileID; return p1; }, 
                    new { ID = profileID }, 
                    splitOn: "OWNER_PROFILESIDFK, ID").AsQueryable();


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.

2/28/2019 11:00:04 PM

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();
5/23/2017 10:27:49 AM

Related Questions

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow