用于延迟加载属性的通用dapper方法

时间:2013-02-06 10:31:52

标签: 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, T1>("query", (t1, t2) => { t1.???
        }
    }

如下所示,我现在需要t1中的属性用t2加载它。 这甚至可能吗?

此示例未完成,当然“查询”字符串将被替换,这仅用于演示。

1 个答案:

答案 0 :(得分:3)

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

或类似的东西。关键是:它实现了FooBar 单独(基于分区),然后让担心如何将它们组合起来