2009-10-15 2 views
0

Я знаю, что в NHibernate у вас есть сопоставления наследования, и я знаю, что вы можете иметь таблицы за класс, таблицу за подкласс и класс таблицы за конкретный класс, но они не совсем соответствуют сценарию У меня есть.Отображение наследования NHibernate

В основном то, что я хочу, чтобы быть в состоянии иметь базовый класс под названием продукт, который выглядит следующим образом:

public class BaseProduct 
{ 
    public virtual int ProductId {get;set;} 
    public virtual string ProductName {get;set;} 
} 

отображающих непосредственно к таблице продукта.

Тогда я хочу иметь класс продукта, который наследуется от BaseProduct так:

public class Product : BaseProduct 
{ 
    public virtual IList<Category> Categories {get;set;} 
} 

Дело в том, что класс продукта должен еще карту на столе продукта, единственное отличие в том, что эта реализация имеет список прилагаемых категорий.

Не вдаваясь в технические причины, почему я должен это делать, я хотел бы знать, возможно ли это вообще?

+0

Когда вы используете один класс над другим? –

+0

Итак, основная проблема заключается в сериализации прокси-серверов NHibernate через WCF. Если у меня есть запрос, в котором я хочу вернуть только базовый продукт, тогда я обычно бывал ленивым загрузкой коллекции категорий, но, к сожалению, это не так хорошо работает в WCF, потому что он всегда будет пытаться и ленить загружать категории в serializtion. – lomaxx

ответ

3

Ваш вопрос и комментарий, я понимаю, что вы хотите «Single Table Inheritance» [PoEAA, Fowler], но не могут позволить себе роскошь быть в состоянии добавить необходимый дискриминатор в таблицу.

Я никогда не сталкивался с этой ситуацией самостоятельно, но стараюсь добавить дискриминатор к вашему сопоставлению, которое является вычисленным значением/производным полем, которое использует sql для выяснения наличия внешних ключей из категории (не будет работать для Продукты с пустыми коллекциями категорий, хотя).

Если ваш сценарий является только для чтения, и вы можете добавлять представления к БД, это вариант для сопоставления с представлением Product с дискриминатором, рассчитанным, как указано выше.

+0

С технической точки зрения дискриминатор будет работать. Поэтому я собираюсь принять это на данный момент. – lomaxx

0

Вы ищете таблицы perclass вам необходимо установить дискриминатор-значение NHDoc for inheritance

+0

Таблица в классе близка к тому, что я хочу, но у меня нет дискриминатора. По сути, я хочу, чтобы таблица за класс без дискриминатора. – lomaxx

0

У вас есть другие уроки, которые унаследованы от BaseProduct? Если нет, вы можете просто отобразить только класс продукта.

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