NHibernate Отношение «многие ко многим»: запрос свойств таблицы присоединения - PullRequest
0 голосов
/ 16 октября 2011

Извините, если название немного расплывчато, у меня есть следующий сценарий: У меня есть три таблицы в моей модели домена следующим образом: enter image description here

существует отношение многие ко многим между таблицей AddingOrder и таблицей Product

в сущности Product у меня есть

public virtual IList<AddingOrder> AddingOrders { get; set; }

со следующим отображением:

<bag name="AddingOrders" generic="true" table="AddingOrderProduct">
  <key column="ProductId"/>
  <many-to-many column="OrderId" class="Application.Domain.Entities.AddingOrder,Application.Domain"/>
</bag>

в сущности AddingOrder у меня есть

public virtual IList<Product> Products { get; set; }

со следующим файлом сопоставления:

<bag name="Products" generic="true" table="AddingOrderProduct">
  <key column="OrderId"/>
  <many-to-many column="ProductId" class="Application.Domain.Entities.Product,Application.Domain"/>
</bag>

и это сущность, которая отображается на присоединяющуюся таблицу

public class AddingOrderProduct
{
    public virtual int Id { get; private set; }
    public virtual decimal Quantity { get; set; }
    public virtual Unit Unit { get; set; }
}

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

<id name="Id" column="Id">
  <generator class="native" >
  </generator>
</id>
<property name="Quantity" type="Decimal" column="Quantity" />
<many-to-one name="Unit" column="Id" not-null="true" class="Application.Domain.Entities.Unit,Application.Domain" />

Пока все хорошо, все работает без проблем. вопрос: Как я могу запросить свойства в таблице соединений AddingOrderProduct и объединить их с двумя другими сторонами отношения ?? (две другие таблицы), нужно ли мне дополнительное отображение между этой таблицей и двумя другими таблицами , например, ниже приведен SQL-запрос, который возвращает список продуктов с указанным количеством и единицей, которые относятся к заказу № 1, название продукта из таблицы продуктов а также количество и идентификатор единицы из таблицы присоединения AddingOrderProduct, а также идентификатор заказа из таблицы AddingOrder:

select  p.Name ,aop.Quantity ,u.Name
from   Product p 
     inner join AddingOrderProduct aop on p.Id = aop.ProductId 
     inner join AddingOrder ao on ao.Id = aop.OrderId
     inner join Unit u on u.Id = aop.UnitId
where ao.Id = 1

как я могу написать этот запрос с NHibernate с упомянутыми сопоставлениями я пропустил много кода просто для простоты, и нет прямого сопоставления один-ко-многим между AddingOrderProduct и двумя другими таблицами. а для юнит-единицы забудьте об этом, это не проблема.

Заранее спасибо;

1 Ответ

1 голос
/ 17 октября 2011

Не используйте многие ко многим. Используйте один-ко-многим от Product и AddingOrder до AddingOrderProduct и наборы AddingOrderProduct в коде.

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