2012-04-19 32 views
5

Tôi lấy chi tiết hồ sơ như sau:Làm cách nào để lấy giá trị cho các đối tượng con bằng Dapper ORM?

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

Đối tượng hồ sơ chứa các bộ sưu tập khác như profileImages. Vấn đề là số mục cho mỗi đối tượng con là số không. Ngoài ra tôi chỉ muốn lấy dữ liệu để nói, profileImages.

Có điều gì cần được đặt để truy vấn đối tượng con không, và nếu có, có thể chỉ định cái nào và bao nhiêu cấp?

Tôi cũng đã cố gắng 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

Và nhận được lỗi sau:

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

Tôi đã cố gắng biến thể của những gì trong splitOn của tôi văn bản, nhưng vẫn nhận được cùng một lỗi.

Trả lời

8

Dapper không hỗ trợ ánh xạ một-nhiều người như thế này. Kiểm tra câu hỏi này, nó có thể giúp mặc dù.

Multi-Mapping, one-to-many

Nếu bảng PROFILEIMAGES của bạn có một FK trên HỒ SƠ ID - bạn có thể phát hành 2 querys và sử dụng 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(); 
} 
+0

Tốt. Tôi thực sự thích điều này tốt hơn là trả về tất cả 1 .. * ánh xạ, vì điều đó có thể dẫn đến các đối tượng phức tạp bị thổi phồng. Chắc chắn họ có rất nhiều thông tin, nhưng có lẽ một số thông tin không cần thiết. Bằng cách này, tôi có thể yêu cầu một cách rõ ràng những bảng con mà tôi muốn dữ liệu. Cảm ơn. – ElHaix

Các vấn đề liên quan