我有一个问题,Linq到Nhibernate使用外连接生成查询。
例如:
return Session.Linq<ClientContact>().Where(c => c.Client.Id = 13).ToList();
生成类似于:
的查询 SELECT...
FROM mw_crafru.clientcontact this_,
mw_crafru.client client1_,
mw_crafru.relationshiptype relationsh4_
WHERE this_.clientid = client1_.clientid(+)
AND this_.relationshiptypeid = relationsh4_.relationshiptypeid
AND client1_.clientid = :p0;:p0 = 13
注意外连接。 clientid = client1 .clientid(+)。 BOO!
为了解决这个问题,我回到使用Session.CreateCriteria。
return Session.CreateCriteria(typeof (ClientContact)).Add(Restrictions.Eq("Client.Id", clientId)).List<ClientContact>();
生成以下查询:
SELECT...
FROM mw_crafru.clientcontact this_,
mw_crafru.client client1_,
mw_crafru.relationshiptype relationsh4_
WHERE this_.clientid = client1_.clientid
AND this_.relationshiptypeid = relationsh4_.relationshiptypeid
AND client1_.clientid = :p0;:p0 = 13
注意没有外连接。 clientid = client1 .clientid。耶!
任何人都知道为什么会这样吗?
答案 0 :(得分:0)
至少使用SQL Server,使用Fluent NH与not-null="true"
或Not.Nullable()
进行多对一映射会导致Get操作使用内部联接而不是左联接。尝试将其添加到ClientContact中的Client映射中。