如何使用Dapper将名称不同的标识列映射到实体类属性?

7
我有一个数据库,其中包含类似BookId、AuthorId等id列。然而,我的代码文件只有一个Id属性。我试图将程序的部分转换为使用NHibernate和Dapper,因此我正在尝试消除对.上的Id和BookId属性的需要。NHibernate具有内置的标识映射,将BookId映射到Book对象的Id属性,类似地,将AuthorId映射到Author对象的Id属性。
在Dapper中是否有一种方法可以做到这一点,而不是在sql查询中给列命名别名?
public class Book {
  public int Id { get; set; }
  public string Name { get; set; }
}

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

我使用的一个示例查询如下:

select * from Books b inner join Author a on a.AuthorId = b.AuthorId

如果Dapper不容易支持这个功能,你有什么其他的选择?

我使用了列的别名来完成这个操作。为什么你不想使用别名呢? - LordHits
@LordHits 我试图避免这种情况,因为返回了很多列。我宁愿不必在SQL中显式地输入每个列名。此外,我认为它在表连接时无法按预期工作。 - Jim Geurts
1个回答

18

根据设计,Dapper没有映射层。走得太远,我们就会不知不觉地陷入配置文件的泥潭。所以,有两个选择:

  • 在SQL中添加别名
  • 在C#中添加shim

因此,可以选择以下任一方法(SQL):

select BookId as [Id], Name from Books

或者(C#):

private int BookId { get { return Id; } set { Id = value; } } // just for dapper

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