Недавно я столкнулся с проблемой использования словарей отображения nhibernate для конкретной модели отношений.Сторона OO включает следующие сущности:
class B // base class
{
public long Id;
public string Name;
public Owner; // a reference to the owner group
}
class Group : B
{
public IDictionary<string, B> ObjectsInGroup;
// dictionary for a look-up from name of any object contained in the group
// to the object itself
}
, и я хотел использовать следующие таблицы для сохранения вышеуказанных сущностей
определение столбца таблицы B для хранения сущностей типа B:
- Id: bigint (первичный ключ)
- Имя: nvarchar (50)
- Владелец: bigint (относится к Id в качестве внешнего ключа)
определение столбца таблицы G для хранения сущностей типа Группа:
- Id: bigint (первичный ключ)
Поскольку объекты в группе управляются в словаре,и словарное отображение nhibernate предназначено для использования, я предполагаю, что фактическая таблица, на которой основано отображение, извлечена из таблицы B. поскольку стандартная таблица, лежащая в основе отображения словаря, имеет следующую форму:
Id (из словаря провайдера) |Ключ |Значение
, где каждая строка представляет пару ключ-значение в словаре сущности с идентификатором 'Id'.
Таким образом, в основном, воображаемая таблица в такой форме для включения отображения можетбыть создан с помощью следующего SQL (просто чтобы дать некоторое представление или прояснить вопрос):
выберите g.Id, o.Name, o.Id из G g, B o, где o.Owner = g.Id
Это несколько упрощенная модель, в оригинале может быть отдельный класс для конечных объектов, в который может быть включена дополнительная таблица, что еще больше усугубит проблему.
Не уверенподдерживает ли NHibernate такое отображение, или если есть какие-то обходные пути или необходимость перепроектировать модель.Любые мысли приветствуются.