Я настраиваю структуру базы данных N2CMS и встречаюсь с проблемой. Ниже перечислены два класса.Nhibernate one-to-many со столом для каждого подкласса
public class Customer : ContentItem
{
public IList<License> Licenses { get; set; }
}
public class License : ContentItem
{
public Customer Customer { get; set; }
}
Отображение nhibernate выглядит следующим образом.
<class name="N2.ContentItem,N2" table="n2item">
<cache usage="read-write" />
<id name="ID" column="ID" type="Int32" unsaved-value="0" access="property">
<generator class="native" />
</id>
<discriminator column="Type" type="String" />
</class>
<subclass name="My.Customer,My" extends="N2.ContentItem,N2" discriminator-value="Customer">
<join table="Customer">
<key column="ItemID" />
<bag name="Licenses" generic="true" inverse="true">
<key column="CustomerID" />
<one-to-many class="My.License,My"/>
</bag>
</join>
</subclass>
<subclass name="My.License,My" extends="N2.ContentItem,N2" discriminator-value="License">
<join table="License" fetch="select">
<key column="ItemID" />
<many-to-one name="Customer" column="CustomerID" class="My.Customer,My" not-null="false" />
</join>
</subclass>
Затем, когда получить экземпляр клиента, customer.Licenses всегда пусто, но на самом деле есть лицензии в базе данных для клиента. Когда я проверяю NHibernate файл журнала, я считаю, что SQL-запрос, как:
SELECT licenses0_.CustomerID as CustomerID1_,
licenses0_.ID as ID1_,
licenses0_.ID as ID2_0_,
licenses0_1_.CustomerID as CustomerID7_0_,
FROM n2item licenses0_
inner join License licenses0_1_
on licenses0_.ID = licenses0_1_.ItemID
WHERE licenses0_.CustomerID = 12 /* @p0 */
кажется, что NHibernate считает, что CustomerID в таблице «n2item». Я не знаю почему, но чтобы заставить его работать, я думаю, что SQL должен быть чем-то вроде этого.
SELECT licenses0_.ID as ID1_,
licenses0_.ID as ID2_0_,
licenses0_1_.CustomerID as CustomerID7_0_,
FROM n2item licenses0_
inner join License licenses0_1_
on licenses0_.ID = licenses0_1_.ItemID
WHERE licenses0_1_.CustomerID = 12 /* @p0 */
Может ли кто-нибудь указать, что случилось с моими сопоставлениями? И как я могу получить правильные лицензии одного клиента? Заранее спасибо.
С уважением, Мейсон, я думаю, возможно, мне нужно придерживаться встроенной базы данных n2, поскольку у настроенного есть так много проблем. – wenqiang
Отображение подкласса - все в порядке. Я добавил элемент «один ко многим». И я попробовал почти все свойства элементов «один ко многим» и «мешок». Ничего не работает. – wenqiang