【问题标题】:Dapper simple mappingDapper 简单映射
【发布时间】:2012-04-16 08:30:37
【问题描述】:

表:

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 获取所有 Documents 及其 Customers?这给了我所有的文件,但客户是空的(当然):

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

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

【问题讨论】:

  • 非常感谢您在问题中提供了必要的 SQL 架构、c# 类和您当前的代码。非常感谢,并且提出了一个写得很好的问题。
  • @MarcGravell:说得很好。为这个事实 +1 了这个问题,所以 OP 得到更多的鼓励来参与这个社区。​​span>

标签: c# sql-server orm dapper


【解决方案1】:

来自dapper project page 的示例(请参阅多重映射部分):

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

【讨论】:

【解决方案2】:
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();

【讨论】:

  • 谢谢,这很好用,但我的问题过于简单了——这是我真正的问题:stackoverflow.com/questions/10223620/… :)
  • 我有类似的类和两个数据库表。我加入了这两个表,但出现此错误:使用多映射 API 时,如果您有除 Id 以外的键,请确保设置 splitOn 参数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多