如何使用Dapper映射具有不同名称的标识列

本文关键字:标识 Dapper 何使用 映射 | 更新日期: 2023-09-27 18:25:40

我有一个数据库,其中包含id列,如BookId、AuthorId等。然而,我的代码文件只有一个id属性。我正在尝试将使用NHibernate的程序部分与Dapper进行转换,因此我正在尝试消除对上的Id和BookId属性的需要。NHibernate有一个内置的身份映射,它将BookId映射到Book对象的Id属性,类似地将AuthorId映射到Author对象的Id特性。

除了在sql查询中为列提供别名之外,有没有其他方法可以实现Dapper?

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不容易支持这一点,我还有什么其他选择吗?

如何使用Dapper映射具有不同名称的标识列

根据设计,dapper没有映射层。再往前走一步,在我们突然知道发生了什么之前,我们就会淹没在配置文件中。所以:两个选项:

  • 在SQL中添加别名
  • 在C中添加一个垫片#

所以要么(sql):

select BookId as [Id], Name from Books

或(C#):

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