継承とDapper.net

dapper

質問

私はDapper.netを使用することに決めました。なぜなら、私が望むだけのことをしているように思えるからです。マッピング、私は何も想像する必要はありません、私は自分のデータウェアとオブジェクトの間のマッピングを扱うのに飽きます。

私の問題 :

私はこれらのクラスを持っているとしましょう:

class Foo{
int ID;
string Name;
}
class Bar : Foo{
string FavoriteMoovie;
}

そして、これらのテーブル:

Foo 
- ID
- Name

Bar
- FooID
- FavoriteMoovie

だから私は同じクエリでFooとBarsをどのように選択できるのか知りたいですか?

これまでの私の唯一のアイデアは

  • バーではないすべてのFoosを選択する
  • すべてのバーを選択

メソッド「Query」のオーバーロードを使用することはできません。なぜなら、ここではマッピング関係のためです。

人気のある回答

非常に厄介ですが、これはおそらくうまくいきます。

db.Query<Bar, object, Foo>("select * from Foo left join Bar on FooID = ID",
 (bar,ignore) => 
   bar.FavoriteMoovie == null ? bar : new Foo{ID = bar.ID, Name = bar.Name});

不利な点は、それなしでは実行できない2つの中間オブジェクトが作成されることです。

他のオプションとしては、単純にBarオブジェクトを選択してから、同じトリックを使用してFoosを除外するか、ダイナミックを選択してから正しいクラスに変換するという方法があります。

個人的には、 NULL FavoriteMoovieを許可していない限り、これを処理するためだけに2回クエリを実行することはしません。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ