2010-02-12 3 views
3

Глупый вопрос nHibernate noob, но я не могу найти ответ нигде ...Соответствует выражениям nHibernate для вложенных таблиц?

У меня есть «товарный» класс, успешно сопоставленный с таблицей продуктов и классом «sku». Sku - дочерний объект «продукта», а две таблицы в БД связаны первичным ключом.

Пока все основные работы nHibernate работают - я могу успешно запускать CRUD-команды против базы данных. Я могу сделать запросы на основе выражений успешно, как и в ...

Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Product) _ 
     .Add(Expression.Like("Name", nameSearchString)) _ 
    .List() 

.. И результат список объектов продукта, которые успешно выставляют ожидаемые дочерние объекты СКА. Однако, если я пытаюсь выше код поиска на имена полей из таблицы Sku, NHibernate выдает ошибку:

Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Product) _ 
     .Add(Expression.Like("SkuCode", skuSearchString)) _ 
    .List() 

Результаты в «не может разрешить свойство: SkuCode из: Продукт»

Это работает:

Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Sku _ 
     .Add(Expression.Like("SkuCode", skuSearchString)) _ 
    .List() 

Но, неудивительно, что он возвращает объекты Sku, тогда как мне нужен объект продукта.

Это также составляет:

Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Product) _ 
     .Add(Expression.Like("Name", nameSearchString)) _ 
     .CreateCriteria("Skus").Add(Expression.Like("SkuCode", skuSearchStrung)) _ 
    .List() 

Но он не возвращает ничего, даже если первое выражение справедливо

Как я могу запустить Expression.Like против полей в таблице Sku?

ответ

3

Я решил это - думал, что оставлю его здесь, чтобы кто-нибудь еще мог его обнаружить. Такого рода вещи, кажется, очень плохо документированы:

Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Product) _ 
     .CreateAlias("Skus", "sku") _ 
     .Add(Expression.Or(_ 
     Expression.Like("Name", nameSearchString), _ 
     Expression.Like("sku.SkuCode", skuSearchStrung))) _ 
    .List() 

Я уже писал о своих разочарованиях с этой структурой: http://mattthr.blogspot.com/2010/02/quey-across-join-in-nhibernate.html

Смежные вопросы