2012-04-16 88 views
5

表:小巧玲瓏簡單的映射

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' 

類:

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

我怎樣才能得到所有Documents他們Customers與小巧玲瓏的?這給我的所有文件,但客戶爲空(當然):

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

編輯 - 相似,但更先進的映射問題:從dapper project page拍攝(見多映射部分)Dapper intermediate mapping

+2

提供,在這個問題,必要的SQL架構,C#類,以及當前的代碼非常感謝。非常感謝,並提出了一個寫得很好的問題。 – 2012-04-16 08:49:13

+0

@MarcGravell:很好說。爲這個事實+爲這個問題+1,所以OP更加鼓勵參與這個社區。 – 2012-04-17 07:10:15

回答

6

例子:

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

謝謝,這個工程很好,但我簡化了我的問題太多 - 這是我真正的問題:http://stackoverflow.com/questions/10223620/dapper-intermediate-mapping :) – sventevit 2012-04-19 07:40:50

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

謝謝,這很好,但我簡化了我的問題太多了 - 這是我真正的問題:http://stackoverflow.com/questions/10223620/dapper-intermediate-mapping :) – sventevit 2012-04-19 07:40:59

+0

我有類似的類和兩個數據庫表。我加入這兩個表,但我得到這個錯誤:當使用多映射APIs確保你設置splitOn參數,如果你有其他鍵以外的ID – 2016-04-20 15:33:39