为什么Linq到Nhibernate会产生外部连接

为什么Linq到Nhibernate会产生外部连接,nhibernate,oracle9i,linq-to-nhibernate,Nhibernate,Oracle9i,Linq To Nhibernate,我对Linq到Nhibernate使用外部联接生成查询有一个问题 例如: return Session.Linq<ClientContact>().Where(c => c.Client.Id = 13).ToList(); 生成以下查询: 选择。。。 从mw_crafru.client联系此, mw_crafru.client1, mw_crafru.relationshiptype relationsh4_ 其中,this.clientid=client1.clienti

我对Linq到Nhibernate使用外部联接生成查询有一个问题

例如:

return Session.Linq<ClientContact>().Where(c => c.Client.Id = 13).ToList();
生成以下查询:

选择。。。
从mw_crafru.client联系此,
mw_crafru.client1,
mw_crafru.relationshiptype relationsh4_
其中,this.clientid=client1.clientid
这个关系类型ID=relationsh4关系类型ID
和client1.clientid=:p0;:p0=13

请注意,没有外部联接this.clientid=client1.clientid。耶


有人知道为什么会发生这种情况吗?

至少在SQL Server中,使用Fluent NH使用
not null=“true”
not.Nullable()
的多对一映射会导致Get操作使用内部联接而不是左联接。尝试将其添加到ClientContact中的客户映射中。

我已经尝试过了。我们正在访问Oracle数据库并使用Fluent NH。我的ClientContact映射类具有以下引用:References(x=>x.Client).Column(“clientid”).Not.Nullable().LazyLoad();那么这可能是LINQ to NHibernate中的一个bug或设计问题。我相当肯定Jamie是正确的……当前的LINQ提供程序只进行左外连接。请查看查询计划。在SQLServer2008上,当有一个where子句测试右侧表的一列时,“join”和“left join”查询版本都有相同的查询计划。
return Session.CreateCriteria(typeof (ClientContact)).Add(Restrictions.Eq("Client.Id", clientId)).List<ClientContact>();