6

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.

kristianp
  • 5,496
  • 37
  • 56
ElHaix
  • 12,846
  • 27
  • 115
  • 203

1 Answers1

9

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();
} 
Community
  • 1
  • 1
Alex
  • 7,901
  • 1
  • 41
  • 56
  • Nice. I actually like this better than it returning all 1..* mappings, as that could lead to inflated complex objects. Sure they have a lot of information, but maybe a some that's not required. In this way, I can explicitly request what child tables I want data from. Thanks. – ElHaix Apr 23 '12 at 13:22