Как: сопоставить (NHibernate) несколько классов с различной бизнес-логикой из одной таблицы? - PullRequest
3 голосов
/ 29 апреля 2011

В настоящее время я работаю с базой данных «коричневого поля», которая содержит таблицу, в которой хранятся данные по 3 различным видам бизнеса.Это связано с SalesOrders и orderline.В старом приложении мы могли добавить к каждому продавцу 3 типа строк заказа: продукты, почасовые ставки и текстовые строки.15 лет назад это было быстрое и грязное решение, позволяющее получить простые запросы в Delphi, чтобы получить все строки в одной таблице данных.Каждый

Теперь я пытаюсь построить объектную модель в C # с помощью NHibernate.Я сделал 3 отдельных объекта без базового класса, потому что эти 3 типа линий не имеют реальной бизнес-логической связи.Однако я хочу объединить эти 3 типа в один список, чтобы их можно было упорядочить.

Я рассмотрел вопрос об использовании наследования, таблица для каждого класса, поскольку таблица соответствует требованиям (нет столбцов с ограничением, не равным нулю)).Это не логичный шаг, так как бизнес по типам совершенно различен (только общие вещи - это userId, описание и замечания).Возможно, компонент?но как сопоставить свойства 3 различным классам без базового класса или каких-либо ссылок, кроме имени таблицы?

Надеюсь, вы, ребята, поняли, что я написал.У меня пока нет реального кода, я просто делал наброски на бумаге о том, что делать с этим кодом.

Кто-нибудь здесь, кто может помочь мне в моем пути?

С уважением, Тед

1 Ответ

6 голосов
/ 29 апреля 2011

Вы можете поместить интерфейс на три объекта и отобразить его как базовый класс, все в одну таблицу:

interface IWhatever 
{
  // central Id for the whole table
  int Id { get; set; }
  // may be some more properties
}

class Product : IWhatever
{
  // ...
}

class HourlyRate : IWhatever
{
  // ...
}

class TextLines : IWhatever
{
  // ...
}

Отображение:

<class name="IWhatever" table="MyBigTable">

  <id .../>
  <discriminator column="Type"/>
  <subclass name="Product" discriminator-value="P">
    <!-- ... -->
  </subclass>
  <subclass name="HourlyRate" discriminator-value="HR">
    <!-- ... -->
  </subclass>
  <subclass name="TextLines" discriminator-value="TL">
    <!-- ... -->
  </subclass>
</class>
...