繼承和Dapper.net

dapper

我決定使用Dapper.net,因為它似乎只是做我想要的:映射,我不需要任何花哨的東西,我只是無聊處理我的datareader和我的對象之間的映射。

我的問題 :

假設我有這些課程:

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

這些表格:

Foo 
- ID
- Name

Bar
- FooID
- FavoriteMoovie

所以我想知道如何在同一個查詢中選擇我的Foo和Bars?

到目前為止我唯一的想法是

  • 選擇所有不是Bars的Foos
  • 然後選擇所有的條

我不能使用方法“查詢”的重載,因為這裡只有映射關係。

熱門答案

非常hacky,但這可能有效。

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

缺點是它會創建一些它可以不用的中間對象。

其他選項是簡單地選擇Bar對象,然後使用相同的技巧過濾掉Foos或選擇動態,然後轉換為正確的類。

我個人不會只是兩次查詢來處理這個,除非你允許NULL FavoriteMoovie,在這種情況下你別無選擇,只能複雜查詢或選擇兩次。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因