2012-02-25 41 views
6

私はBookId、AuthorIdなどのidカラムを持つデータベースを持っています。しかし、私のコードファイルはIdプロパティを持っています。私はDapperでNHibernateを使うプログラムの部分を変換しようとしているので、IdとBookIdの両方のプロパティの必要性を排除しようとしています。 NHibernateには、BookIdをBookオブジェクトのIdプロパティにマッピングするアイデンティティマップが組み込まれており、同様にAuthorIdがAuthorオブジェクトのIdプロパティにマッピングされています。異なる名前のID列をDapperとどのようにマップするのですか?

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

私はのようなルックスを使用しているサンプルクエリ:Dapperのは簡単にこれをサポートしていない場合

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

、私が持っている他のどのようなオプションに任意の考え?

+0

これは、列のエイリアスを使用して行っています。なぜエイリアスを使いたくないのですか? – LordHits

+0

@LordHits返される列がたくさんあるので、私はそれを避けようとしています。私はむしろ明示的にSQLでそれぞれを入力する必要はありません。また、私はテーブルジョインで期待通りに動作するとは思わない –

答えて

15

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

select BookId as [Id], Name from Books 

または(C#の):

  • SQL
  • に別名を追加
  • のでC#

のいずれか(SQL)にシムを追加します。

private int BookId { get { return Id; } set { Id = value; } } // just for dapper 
関連する問題