Ошибка генерации SQL с NHibernate, Bag и Enumerable.Any ()? - PullRequest
1 голос
/ 21 февраля 2012

Я сталкиваюсь со следующей ситуацией.

Моя объектная модель выглядит следующим образом:

EntityA --*> EntityB -> EntityC

EntityA ссылается на список EntityB. EntityB ссылается на один EntityC

Мое отображение:

  <class name="EntityA" table="TAB_A" >
    <id name="Id" column="A_ID" >
      <generator class="native" />
    </id>
    <version name="Version" column="VERSION" />
    <bag name="listOfB" cascade="save-update" table="A_TO_C" lazy="false" >
      <key column="FK_A_ID" />

      <composite-element class="EntityB" >
        <many-to-one name="refToC" class="EntityC" column="FK_C_ID" cascade="save-update" />
      </composite-element>
    </bag>
  </class>

Я исключил все дополнительные свойства и прочее.

Я запрашиваю БД:

var query = session.Query<EntityA>()
                    .Where(a=> a.listOfB.Any(b => b.refToC == anInstanceOfC));

// count all matches
var count = query.ToFutureValue(t => t.Count());

Ладно, пока это хорошо для меня;). Когда я выполняю запрос, я получаю сообщение об ошибке, что SQL-оператор не выполняется. Сгенерированный SQL содержит следующий вложенный оператор:

select listOfB1_.A_ID
from A_TO_C listOfB1_
where a0_.A_ID=listOfB1_.FK_A_ID
and listOfB1_.FK_C_ID=?

Оператор ожидает столбец A_ID в таблице A_TO_C (который фактически является именем столбца id-столбца TAB_A). Он должен выбрать столбец listOfBl_.FK_A_ID, который является столбцом внешнего ключа, ссылающимся на столбец A_ID в TAB_A.

Теперь вопрос: я не прав или это SQL-генератор?

1 Ответ

2 голосов
/ 29 февраля 2012

На самом деле это ошибка.

См. другой поток в stackoverflow ,

мой вопрос и обсуждение nhibernate googlegroup

и фактическое сообщение об ошибке в трекере проблем nhibernate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...