2012-04-16 28 views
5

Bảng:Dapper đơn giản mapping

create table Documents 
    (Id int, 
    SomeText varchar(100), 
    CustomerId int, 
    CustomerName varchar(100) 
    ) 

insert into Documents (Id, SomeText, CustomerId, CustomerName) 
    select 1, '1', 1, 'Name1' 
    union all 
    select 2, '2', 2, 'Name2' 

Lớp học:

public class Document 
{ 
    public int Id { get; set; } 
    public string SomeText { get; set; } 
    public Customer { get; set; } 
} 

public class Customer 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

Làm thế nào tôi có thể nhận được tất cả Documents với Customers của họ với Dapper? Điều này sẽ cho tôi tất cả các tài liệu, nhưng khách hàng là null (tất nhiên):

connection.Query<Document>("select Id, SomeText, CustomerId, CustomerName from Documents")... 

EDIT - tương tự, nhưng cao cấp hơn câu hỏi lập bản đồ: Dapper intermediate mapping

+2

Một lời cảm ơn lớn trong việc cung cấp, trong câu hỏi, lược đồ SQL cần thiết, C# lớp học, và mã hiện tại của bạn. Nó được nhiều đánh giá cao, và làm cho một câu hỏi rất tốt bằng văn bản. –

+0

@MarcGravell: Rất hay. + 1'd câu hỏi này chỉ cho thực tế này, vì vậy OP được khuyến khích nhiều hơn để tham gia vào cộng đồng này. –

Trả lời

6

Ví dụ lấy từ dapper project page (xem phần đa Mapping):

var sql = 
@"select * from #Posts p 
left join #Users u on u.Id = p.OwnerId 
Order by p.Id"; 

var data = connection.Query<Post, User, Post>(sql, (post, user) => { post.Owner = user; return post;}); 
var post = data.First(); 

post.Content.IsEqualTo("Sams Post1"); 
post.Id.IsEqualTo(1); 
post.Owner.Name.IsEqualTo("Sam"); 
post.Owner.Id.IsEqualTo(99); 
+0

Cảm ơn, điều này làm việc tuyệt vời nhưng tôi đơn giản hóa câu hỏi của tôi quá nhiều - đây là vấn đề thực sự của tôi: http://stackoverflow.com/questions/10223620/dapper-intermediate-mapping :) – sventevit

4
var docs = connection.Query<Document, Customer, Document>(
    "select Id, SomeText, CustomerId as [Id], CustomerName as [Name] from Documents", 
    (doc, cust) => { doc.Customer = cust; return doc; }).ToList(); 
+0

Cảm ơn, công trình này tuyệt vời nhưng tôi đã đơn giản hóa câu hỏi của mình quá nhiều - đây là vấn đề thực sự của tôi: http://stackoverflow.com/questions/10223620/dapper-intermediate-mapping :) – sventevit

+0

Tôi có các lớp tương tự và hai bảng cơ sở dữ liệu. Tôi JOIN hai bảng này nhưng tôi nhận được lỗi này: Khi sử dụng các API đa ánh xạ, hãy đảm bảo bạn đặt tham số splitOn nếu bạn có khóa ngoài Id –