如何使用带有关联路径的投影来限制结果集
本文关键字:结果 投影 何使用 关联 路径 | 更新日期: 2023-09-27 17:53:11
我创建了一个Fluent NHibernate约定,将'Join'设置为所有多对一关联的获取模式(在我看来,发送select来每个获取1条记录是没有意义的)。问题是一些实体有大量的列(遗留数据库),我需要限制我正在创建的报告的结果集。
考虑下面的例子:
class X
{
public int Id {get;set;}
public virtual Y RefToY {get;set;}
...
}
class Y
{
public int Id {get;set;}
public virtual Z RefToZ {get;set;}
...
}
class Z
{
public int Id {get;set;}
public virtual String data1 {get;set;}
public virtual String data2 {get;set;}
public virtual String data3 {get;set;}
...
}
想象一下,除了我展示的属性之外,每个实体还有200多个属性,每个属性映射到一个列。
假设我需要创建的报告基于X(意味着标准植根于X),并且我需要获取X的'Id'属性和Z的'data1', 'data2'和'data3'属性以显示在DataGrid上。获取600列的结果集是没有意义的,所以我需要使用Criteria API指定我只需要这4列。我怎样才能快速完成呢?我试过这样设置投影:
var crit = Session.CreateCriteria<X>().SetProjection(Projections.ProjectionList()
.Add(Projections.Property("Id"))
.Add(Projections.Property("RefToY.RefToZ.data1"))
.Add(Projections.Property("RefToY.RefToZ.data2"))
.Add(Projections.Property("RefToY.RefToZ.data3")));
但是这会导致错误显示:"RefToY.RefToZ. "data1"…属性不存在。这就产生了我的问题。我如何使用NHibernate标准API来完成这个?
您需要向标准添加一个连接。试一试……
var crit = Session.CreateCriteria<X>()
.CreateAlias("RefToY", "y")
.CreateAlias("y.RefToZ", "z")
.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("Id"))
.Add(Projections.Property("z.data1"))
.Add(Projections.Property("z.data2"))
.Add(Projections.Property("z.data3")));