NHibernate - Одна таблица на иерархию классов - наследующие классы неизвестны - PullRequest
1 голос
/ 29 января 2011

В моей модели все производные классы имеют такие же ** постоянные ** атрибуты и методы, как и базовый абстрактный класс.Есть некоторые специфичные для класса атрибуты, которые не сохранены, и методы имеют различную реализацию.Прямо сейчас у меня есть около 4 классов наследования, и я добавлю больше в будущем.Суть приложения заключается в том, что такие классы могут быть добавлены для различных целей, поэтому невозможно знать их заранее.Единственное, что дано, это то, что все они будут использовать одни и те же методы и постоянные атрибуты.Это один столбец, который будет использоваться в качестве дискриминатора.

Я борюсь со стратегией.Очевидно, я не хочу писать ClassMap для каждого производного класса.На самом деле я, как слой постоянства, полностью игнорирую эти производные классы.Я думаю о том, чтобы иметь возможность создавать производные классы из базового класса и возвращать базовый класс.

Не думаю, что у меня есть лучший выбор?

1 Ответ

2 голосов
/ 29 января 2011

Ваш подход имеет недостатки в том, что уровень персистентности не может не знать о подклассах, поскольку он должен знать, что это за класс при загрузке / хранении.

Что вы можете сделать, это использовать отображение на основе соглашения вместо явного (Fluent имеет Automapping, а ConfORM только на основе соглашения / переопределения), так что вам не нужно писать каждую карту классов .

В ConfORM это так же просто, как сказать, например, orm.TablePerClass<TheBaseClass>(), затем mapper.CompileMappingFor(TheBaseClassAndAllItsSubclasses), и вы получите сопоставления без каких-либо дополнительных усилий.

...