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.???
        }
    }

正如你在下面看到的,我现在需要 t1 中的属性来用 t2 加载它。这甚至可能吗?

这个例子没有完成,当然会替换“查询”字符串,这只是为了演示。

4

1 回答 1

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

或类似的东西。关键是:它分别物化了Foo和(基于分区),然后让担心如何组合它们。Bar

于 2013-02-07T08:00:42.960 回答