NHibernate QueryOver加入不相关的实体 [英] NHibernate QueryOver to join unrelated entities

查看:73
本文介绍了NHibernate QueryOver加入不相关的实体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用以下查询来获取所需的结果:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆