C# 财产懒散装载的通用精巧方法

C# 财产懒散装载的通用精巧方法,c#,dapper,C#,Dapper,我正在尝试为Dapper.Query创建一个通用方法。现在我遇到麻烦了。 这是我的例子 public IEnumerable<T1> Lazy<T1, T2>(T2 table) where T1 : EntityBase { using (IDbConnection cn = GetCn()) { cn.Open(); return cn.Query<T1, T2,

我正在尝试为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.???
        }
    }
public IEnumerable Lazy(T2表),其中T1:EntityBase
{
使用(IDbConnection cn=GetCn())
{
cn.Open();
返回cn.Query(“Query”,(t1,t2)=>{t1。???
}
}
正如您在下面所看到的,我现在需要使用t1中的属性来加载t2。 这可能吗


本例未完成,当然是“查询”字符串将被替换,这只是为了演示。

Dapper不包括延迟加载,并且提供零支持来帮助实现延迟加载,因为这不是它试图做的事情-它是一个实用程序,而不是一个框架。但是,您的示例表明您正在讨论水平分区的数据,例如,假设我们有:

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;
});
返回cn.Query(Query,args,(foo,bar)=>{
foo.Bar=Bar;
返回foo;
});
要点是:它将
Foo
Bar
分别具体化(基于分区),然后让您考虑如何组合它们