Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多对一上的NHibernate QueryOver投影_Nhibernate_Projection_Queryover - Fatal编程技术网

多对一上的NHibernate QueryOver投影

多对一上的NHibernate QueryOver投影,nhibernate,projection,queryover,Nhibernate,Projection,Queryover,我正在尝试使用多对一上的投影来获得一个查询 类“Post”有一个属性多对一“Creator” 使用 可以工作,但每个创建者都是通过单个查询检索的,而不是像不使用选择/投影时那样使用联接。因此,如果有5个帖子有5个不同的创建者,那么将运行6个查询,1个查询帖子列表,5个查询创建者列表 我试着用一个JoinAlias让它工作,但没有任何效果 我已经搜索了一个解决方案,但是我找到的所有解决方案都使用了Linq提供程序,因为实际的“字段列表”是通过一个参数传递的,所以它并不真正适合 是否有人知道除了li

我正在尝试使用
多对一
上的投影来获得一个
查询

类“Post”有一个属性
多对一
“Creator”

使用

可以工作,但每个创建者都是通过单个查询检索的,而不是像不使用选择/投影时那样使用联接。因此,如果有5个帖子有5个不同的创建者,那么将运行6个查询,1个查询帖子列表,5个查询创建者列表

我试着用一个
JoinAlias
让它工作,但没有任何效果

我已经搜索了一个解决方案,但是我找到的所有解决方案都使用了Linq提供程序,因为实际的“字段列表”是通过一个参数传递的,所以它并不真正适合


是否有人知道除了linq提供程序之外,是否还有其他解决方案?

有一个解决方案,我们可以使用
多对一
的投影,然后使用自定义结果转换器

免责声明:我可以阅读VB语法,但没有足够的勇气写。。。我希望你能读懂C#并把它转换成VB

我们可以有这样的投影:

// aliases
Post root = null;
Creator creator = null;

// projection list
var columns = Projections.ProjectionList();

// root properties
columns.Add(Projections.Property(() => root.ID).As("ID"));
columns.Add(Projections.Property(() => root.Text).As("Text"));

// reference properties
columns.Add(Projections.Property(() => creator.ID).As("Creator.ID"));
columns.Add(Projections.Property(() => creator.FirstName).As("Creator.FirstName"));

// so our projections now do have proper ALIAS
// alias which is related to domain model 
//  (because "Creator.FirstName" will be use in reflection)

var query = session.QueryOver<Post>(() => root)
    .JoinAlias(() => root.Creator, () => creator)
    .Select(columns)
//别名
Post root=null;
Creator=null;
//投影表
var columns=Projections.ProjectionList();
//根属性
columns.Add(Projections.Property(()=>root.ID).As(“ID”);
columns.Add(projects.Property(()=>root.Text).As(“Text”);
//参考属性
添加(Projections.Property(()=>creator.ID).As(“creator.ID”);
columns.Add(Projections.Property(()=>creator.FirstName).As(“creator.FirstName”);
//所以我们的预测现在有了正确的别名
//与域模型相关的别名
//(因为“Creator.FirstName”将用于反射)
var query=session.QueryOver(()=>root)
.JoinAlias(()=>root.Creator,()=>Creator)
.选择(列)
现在我们需要smartTransformer,这是我们自己的定制产品(可插拔性是NHibernate的强大功能)。在这里您可以找到一个:

我们可以这样继续下去

var list = query
    .TransformUsing(new DeepTransformer<Post>())
    .List<Post>()
var list=query
.TransformUsing(新的DeepTransformer())
.List()
还请检查以下内容:

var list = query
    .TransformUsing(new DeepTransformer<Post>())
    .List<Post>()