Почему Linq to Nhibernate производит внешнее соединение - PullRequest
3 голосов
/ 21 июля 2010

У меня проблема с 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.Ууу!

Кто-нибудь знает, почему это происходит?

1 Ответ

0 голосов
/ 21 июля 2010

По крайней мере, для SQL Server сопоставление "многие к одному" с not-null="true" или Not.Nullable() с использованием Fluent NH приводит к тому, что операции Get используют внутреннее соединение вместо левого. Попробуйте добавить это в свое сопоставление для клиента в ClientContact.

...