NHibernate QueryOver加入不相关的实体 [英] NHibernate QueryOver to join unrelated entities
问题描述
我正在使用以下查询来获取所需的结果:
I have the following query working which gets the results I want:
int associatedId = 123;
MyObject alias = null;
var subQuery = QueryOver.Of<DatabaseView>()
.Where(view => view.AssociatedId == associatedId)
.And(view => view.ObjectId == alias.ObjectId)
.Select(view => view.ObjectId);
var results = session.QueryOver<MyObject>(() => alias)
.WithSubquery.WhereExists(subQuery)
.List();
DatabaseView已被映射为实际的NHibernate实体(因此我可以将其与QueryOver一起使用),但是在HBM映射中它未与MyObject关联.
DatabaseView has been mapped as an actual NHibernate entity (so I can use it with QueryOver), but it is not associated to MyObject in the HBM mappings.
此查询使用SELECT ... FROM MyObject WHERE EXISTS(此处为DatabaseView的子查询)返回IList.我该如何重写此代码以返回相同的信息,但是要使用JOIN?
This query returns an IList using a SELECT ... FROM MyObject WHERE EXISTS (subquery for DatabaseView here). How can I re-write this to return the same information but using a JOIN instead?
推荐答案
您可以在NHibernate 3+中使用Linq加入不相关的实体
You can join onto unrelated entities with Linq in NHibernate 3+
很有趣,您使用了join
查询表达式元素:
Funnily enough you use the join
query expression element:
from type1 in Repository.Query<MyType1>()
join type2 in Repository.Query<MyType2>()
on type1.Id equals type2.Id
注意:Repository.Query只是从会话中返回一个IQueryable查询
Note: Repository.Query is just returning an IQueryable Query from the session
我希望QueryOver有一个解决方案,因为我并不总是希望在我的域中为双向关系建模,但是它们对于查询仍然有用.
I'm hoping there is a solution for QueryOver as I don't always want to model two-way relationships in my domain but they are still useful for querying.
此外,您可以使用Criteria API映射Access ="noop" 2路关系,而无需放入POCO类中:
Also, you can map a Access="noop" 2 way relationship using Criteria API without putting into your POCO classes:
http://ayende.com/blog/4054/nhibernate-query -only-properties
这篇关于NHibernate QueryOver加入不相关的实体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!