Свободный NHibernate - Карта 2 идентичных классов в одной таблице - PullRequest
0 голосов
/ 10 января 2011

Я видел этот (без ответа) вопрос, заданный однажды, но в другом контексте. Я ищу, чтобы два объекта домена отображались на одну и ту же таблицу, БЕЗ дискриминатора. Два класса:

public class Category
{
    public virtual int Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual ReadOnlyCategory ParentCategory { get; private set; }
}

и

public class ReadOnlyCategory
{
    public virtual int Id { get; private set; }
    public virtual string Name { get; private set; }
    public virtual ReadOnlyCategory ParentCategory { get; private set; }
}

Основное отличие состоит в том, что все открытые свойства ReadOnlyCategory доступны только для чтения. Моя идея заключается в том, что я хочу, чтобы все пользователи этого класса знали, что они должны связываться только с категорией, на которую они в данный момент «смотрят», а не с какими-либо другими категориями в иерархии. (Я остановил другие свойства в отношении подкатегорий.)

Очевидно, что в базе данных Category и ReadOnlyCategory - это одно и то же, и NHibernate должен обрабатывать их очень схожим образом при сохранении их. Здесь есть три проблемы, заключенные в одну:

1) Как мне сделать сопоставление?

2) Как создать экземпляр объекта или ReadOnlyCategory при создании экземпляров объектов?

3) Будет ли отображение достаточно разумным при сохранении объектов или мне нужно использовать здесь точку расширяемости?

Есть какие-нибудь указатели на то, как мне это сделать?

(Или я сумасшедший?)

1 Ответ

0 голосов
/ 10 января 2011

Для меня это выглядит как неправильный дизайн объектной модели. Я не вижу веской причины для введения нового класса только по причинам авторизации (разрешено ли пользователю изменять объект данной категории?). Вы также можете использовать один класс и выдать, например, InvalidOperationException, если конечный пользователь не должен изменять категорию.

...