2012-04-16 8 views
5

表:Dapperの単純なマッピング

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

どのように取得することができますDapperのとのCustomersを持つすべてのDocuments?これは私にすべての文書を与えるが、顧客は(もちろん)nullである:

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

EDIT - 似ていますが、より高度なマッピング質問:dapper project pageから取らDapper intermediate mapping

+2

、質問に、必要なSQLスキーマ、C#クラス、およびあなたの現在のコードを提供するための大きな感謝。それは非常に感謝し、非常によく書かれた質問のためになります。 –

+0

@MarcGravell:非常によく言った。この事実だけのためにこの質問を+1したので、OPはこのコミュニティに参加することをさらに奨励します。 –

答えて

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

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

+0

私は同様のクラスとデータベースの2つのテーブルを持っています。私はこの2つのテーブルに参加しますが、私はこのエラーが発生しています:マルチマッピングAPIを使用する場合、ID以外のキーがある場合はsplitOnパラメータを確実に設定してください –

関連する問題