我试图为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加载它。 这甚至可能吗?
此示例未完成,当然“查询”字符串将被替换,这仅用于演示。
答案 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;
});
或类似的东西。关键是:它实现了Foo
和Bar
单独(基于分区),然后让你担心如何将它们组合起来