Dapper简单映射

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

我该如何使用Dapper获取所有带有其客户信息的文档?这个查询可以获取所有文档,但是客户信息为空(当然):
connection.Query<Document>("select Id, SomeText, CustomerId, CustomerName from Documents")...

编辑 - 类似但更高级的映射问题: Dapper中级映射


2
非常感谢您在问题中提供必要的SQL模式、C#类和您当前的代码。这些都非常有帮助,使得问题描述得非常清晰明了。再次感谢! - Marc Gravell
@MarcGravell:说得非常好。我为这个事实点了+1,这样OP就会更加受到鼓励参与社区。 - Robert Koritnik
2个回答

6

以下示例取自dapper项目页面(请参见多重映射部分):

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

谢谢,这很有效,但我简化了我的问题 - 这是我的真正问题:https://dev59.com/oWLVa4cB1Zd3GeqP0d-f :) - 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();

谢谢,这很有效,但我简化了我的问题 - 这是我的真正问题:https://dev59.com/oWLVa4cB1Zd3GeqP0d-f :) - sventevit
我有类似的类和两个数据库表。我将这两个表JOIN在一起,但是出现了以下错误:当使用多映射API时,请确保设置splitOn参数(如果您有除Id之外的键)。 - Lorenzo Belfanti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接