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.
Dapper doesn't support a One-To-Many mapping like this out of the box. Check out this question, it may help though.
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();
}