когда я использую отношения один-ко-многим, я получаю:
коллекция не связана ни с одним сеансом
ошибки призагружаю с нетерпением и не получаю детей, если загружаю лениво.
при использовании многие ко многим, я получаю ненужные и неправильные объединения.
Схема данных выглядит следующим образом:
Элемент:
- int ID (PK)
- имя строки
- int StorageId(Хранение FK, неуникальное использование)
Хранение (игнорируется в отображении):
TransporterToStorage (содержит информацию, а не только таблицу ссылок):
- int ID (PK)
- int StorageId (FK Storage)
- int TransporterId (FK Transporter)
- строка TransportLineName
Transporter (игнорируется в mapping):
Элемент должен быть представлен C #/ NHibernate класс, с дополнительным свойством коллекции TransportersToStorage
, содержащим 0-n записей.Из-за соображений производительности я хочу сопоставить только Item.StorageId
с TransporterToStorage.StorageId
и игнорировать таблицу Storage
, которая содержит первичный ключ для обоих.
<bag name="TransportersToStorages" ... >
<key property-ref="StorageId" unique="false" ... />
<one-to-many class="TransporterToStorage" column="StorageId" ... />
</bag>
Кажется, один-ко-многимнарушать некоторые правила NHibernate, потому что равные TransporterToStorage
записи могут принадлежать нескольким элементам.Вероятно, это является причиной того, что коллекция
не связана ни с одним сеансом
Ошибка при активной загрузке.
Конкретный запрос похож на (быстрый псевдо-HQL, но на самом деле выполняется с помощью критериев):
select Item inner join fetch TransporterToStorage tts
where tts.TransporterId = :p1 and tts.StorageId in (:p2, :p3, :p4)
Может ли быть сопоставление «многие ко многим» или подобное, только с одним соединением в SQL, отправленном в базу данных?
Что лучше всего сопоставить это?
Дочерняя коллекция загружается по умолчанию лениво (то есть, совсем не загружается), а в данном случае охотно.