2013-02-06 17 views
1

我試圖爲Dapper.Query製作一個通用方法。現在我遇到了麻煩。 這裏是我的榜樣屬性延遲加載的通用小巧方法

public IEnumerable<T1> Lazy<T1, T2>(T2 table) where T1 : EntityBase 
    { 

     using (IDbConnection cn = GetCn()) 
     { 
      cn.Open(); 

      return cn.Query<T1, T2, T1>("query", (t1, t2) => { t1.??? 
     } 
    } 

就像你在下面SE,我現在需要在T1的屬性與T2加載它。 這甚至可能嗎?

這個例子沒有完成,當然「查詢」字符串會被替換,這只是爲了演示。

回答

3

小巧玲瓏不包括延遲加載,並準確提供零支持,以幫助實現加載,因爲是不是它試圖做 - 這是一個實用工具,而不是一個框架。然而,你的例子表明,你正在談論水平分區數據,例如,說我們有:

select foo.*, bar.* 
from foo inner join bar on bar.ParentId = foo.Id 
where foo.Category = @category 

,並假設爲簡單起見,無論[foo][bar]有一個Id列(它自動處理,雖然有辦法手動指定分區規則)。那麼這將變成:

return cn.Query<Foo, Bar, Foo>(query, args, (foo, bar) => { 
    foo.Bar = bar; 
    return foo; 
}); 

或類似的東西。重點是:它分別實現FooBar(基於分區),然後讓擔心如何將它們組合。