用于属性lazyloading的通用dapper方法

本文关键字:dapper 方法 属性 lazyloading 用于 | 更新日期: 2023-09-27 17:57:49

我正在尝试为Dapper创建一个通用方法。查询现在我遇到麻烦了。这是我的示例

   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。这可能吗?

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

用于属性lazyloading的通用dapper方法

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分别具体化(基于分区),然后让担心如何组合它们。