異なる名前のID列をDapperとどのようにマップするのですか?

c# dapper

質問

私はBookId、AuthorIdなどのidカラムを持つデータベースを持っています。しかし、私のコードファイルはIdプロパティを持っています。私はDapperでNHibernateを使うプログラムの部分を変換しようとしているので、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がこれを簡単にサポートしていない場合は、私が持っている他のオプションについて考えてみてください。

受け入れられた回答

設計上、dapperにはマッピングレイヤがありません。その道を一歩踏み出すと、突然何が起こったのかを知る前に、設定ファイルに溺れてしまいます。したがって、2つのオプション:

  • SQLにエイリアスを追加する
  • シムをC#に追加する

だからどちらか(SQL):

select BookId as [Id], Name from Books

または(C#):

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


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow