2012-04-25 25 views

Trả lời

10

Tôi nghĩ rằng đây là những gì bạn đang tìm kiếm mặc dù rất khó để nói mà không có một ví dụ về truy vấn bạn đang cố thực hiện.

var sql = @"Select * 
      From Parent 
      Left Join Child on Child.ParentID = Parent.ParentID 
      Where Parent.ParentID = @id 
      ... more queries"; 

using(var reader = connection.QueryMultiple(sql, new {id=selectedId})) 
{ 
    var stuff = reader.Read<Parent, Child, Parent>(
     (p,c)=>p.Child = c, splitOn: "ChildId"); 
    // Continue to read from the other queries in your sql. 
} 

Về cơ bản các phương pháp Read của SqlMapper.GridReader cũng tương tự như phương pháp Query mở rộng. Bạn chỉ nhận được thông số splitOn với một trong các quá tải mất nhiều hơn hai loại chung.

1

Theres một ví dụ nhanh lấy từ thread khác: how-to-get-values-for-child-objects

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

Mỗi truy vấn trả về một tập các đối tượng mà sau đó có thể được ánh xạ tới các đơn vị của bạn.

+0

Cảm ơn bạn Alex. Nhưng tôi đang tìm cách sử dụng [Multimapping] (https://github.com/SamSaffron/dapper-dot-net/blob/master/Tests/Tests.cs#L459) tính năng –

+0

Bạn có thể cung cấp một ví dụ không về những gì bạn đang cố gắng làm? – Alex

+1

Về cơ bản, tôi lưu trữ một số trường không chuẩn hóa trong SQL (ví dụ: trường DTags nơi tôi có tất cả các thẻ được phân cách bằng dấu ";", v.v.). Và khi tôi sử dụng QueryMultiple (Đọc phương pháp) không có tùy chọn để sử dụng tham số "tách" như trong các truy vấn MultiMapping –

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