C# 财产懒散装载的通用精巧方法
我正在尝试为Dapper.Query创建一个通用方法。现在我遇到麻烦了。 这是我的例子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,
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
分别具体化(基于分区),然后让您考虑如何组合它们