【问题标题】:How to map an identity column, that has a different name, with Dapper?如何使用 Dapper 映射具有不同名称的标识列?
【发布时间】:2012-02-25 00:10:25
【问题描述】:

我有一个数据库,其中包含 BookId、AuthorId 等 id 列。但是,我的代码文件只有一个 Id 属性。我正在尝试将使用 NHibernate 的程序部分与 Dapper 进行转换,因此我试图消除对 . NHibernate 有一个内置的身份映射,它将 BookId 映射到 Book 对象的 Id 属性,同样将 AuthorId 映射到 Author 对象的 Id 属性。

除了在 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 我试图避免这种情况,因为我有很多列被返回。我宁愿不必在 sql.另外,我不相信它会像预期的那样与表连接一起工作

标签: c# dapper


【解决方案1】:

按照设计,dapper 没有映射层。沿着这条路走了一步,在我们突然知道发生了什么之前,我们将淹没在配置文件中。所以:两种选择:

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

所以要么(sql):

select BookId as [Id], Name from Books

或(C#):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多