2011-08-16 26 views
20

Tôi có một công ty có chứa một đối tượng địa chỉ. Trả về SQL bằng phẳng và tôi đang tìm kiếm để truy vấn <> để tải tất cả các đối tượng.dapper -ulti-mapping: phẳng sql trả về đối tượng lồng nhau

cnn.Query<Company,Mailing,Physical,Company>("Sproc", 
        (org,mail,phy) => 
        { 
         org.Mailing = mail; 
         org.Physical = phy; 
         return org; 
        }, 
        new { ListOfPartyId = stringList }, null, true, commandTimeout: null, 
        commandType: CommandType.StoredProcedure, splitOn: "MailingId,PhyscialId").ToList(); 

Tôi cũng không chắc liệu tôi có đúng SplitOn hay không. Tôi nhận được thông báo:

Khi sử dụng các API đa bản đồ đảm bảo bạn thiết lập các param splitOn nếu bạn có phím khác ngoài tên Id Parameter: splitOn

Gợi ý sẽ là tuyệt vời.

Các ví dụ trong Test.cs không phải là những gì mã yêu cầu làm tham số cho các truy vấn. Đây cần phải được cập nhật

+1

Bạn có thể đăng các cột tập hợp kết quả được trả về bởi cuộc gọi sproc không? Bạn cần phải chắc chắn rằng các cột trong SplitOn tồn tại trong tập kết quả – bdowden

+2

MailingId được trả về. Tất cả các giá trị trả về của proc là các thuộc tính/trường của đối tượng. – Arnej65

+1

Câu trả lời hay nhất cho tính năng ghép kênh đa phương tiện. http://stackoverflow.com/questions/7472088/correct-use-of-multimapping-in-dapper/7478958#7478958 – CPhelefu

Trả lời

15

đối với tôi công trình này hoàn hảo ... có lẽ là lỗi đánh máy?

Tôi thấy PhyscialId chắc chắn trông giống như một.

class Company 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public Mailing Mailing { get; set; } 
    public Physical Physical { get; set; } 
} 

class Mailing 
{ 
    public int MailingId { get; set; } 
    public string Name { get; set; } 
} 

class Physical 
{ 
    public int PhysicalId { get; set; } 
    public string Name { get; set; } 
} 

public void TestSOQuestion() 
{ 
    string sql = @"select 1 as Id, 'hi' as Name, 1 as MailingId, 
     'bob' as Name, 2 as PhysicalId, 'bill' as Name"; 
    var item = connection.Query<Company, Mailing, Physical, Company>(sql, 
       (org, mail, phy) => 
       { 
        org.Mailing = mail; 
        org.Physical = phy; 
        return org; 
       }, 
        splitOn: "MailingId,PhysicalId").First(); 


    item.Mailing.Name.IsEqualTo("bob"); 
    item.Physical.Name.IsEqualTo("bill"); 

} 
+0

Tôi hiểu lầm rằng SplitOn đang tách phần trả về được đặt bởi các giá trị đó. Nó hiện đang hoạt động. Tuy nhiên, tôi không thể sử dụng cú pháp chính xác như bạn đã nêu ở trên. Tôi cần phải cung cấp cho các CommandType, cờ đệm vv – Arnej65

+1

Tôi đã tự hỏi nó sẽ làm việc nếu truy vấn cơ sở dữ liệu đã có một bên ngoài tham gia bên ngoài và các thông tin vật lý có thể không tồn tại/null. Điều này vẫn sẽ làm việc? – Marko

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