数查询不必要交叉连接我使用此查询:防止在产生的SQL代码
return from oi in NHibernateSession.Current.Query<BlaInteraction>()
select new BlaViewModel
{
...
NoPublications = oi.Publications.Count(),
...
};
BlaInteraction包含出版物一个IList(即实体)。确定出版物的数量并不是真的需要为出版物做所有的联合。我可以阻止nhibernate在生成的sql中使用连接(例如使用投影???)吗?
谢谢。
基督教
PS:
这是NH生产什么(稍作改动):
select cast(count(*) as INT) from RelationshipStatementPublications publicatio21_, Publication publicatio22_ inner join Statements publicatio22_1_ on publicatio22_.StatementId=publicatio22_1_.DBId where publicatio21_.StatementId = 22762181 and publicatio21_.PublicationId=publicatio22_.StatementId
这是就足够了:
select cast(count(*) as INT) from RelationshipStatementPublications publicatio21_ where publicatio21_.StatementId = 22762181
你知道它*是*保湿刊物吗? SQL事件探查器说的实际上是在服务器上运行的? – AakashM
谢谢 - 对不起,你是对的。这些连接与“水合”无关。我编辑了这个问题并添加了一些sql。 – cs0815
(不是一个nhibernate专家)事实上,它产生一个'CROSS JOIN'(在FROM子句中没有明确加入的表),这表明NHibernate缺乏关于对象之间关系的一些知识;但是,我首先要检查其查询和理想查询的SQL执行计划 - 可能是* SQL Server *能够解决这个问题。 – AakashM