Как делать: Картирование (nhibernate) Несколько классов с различной бизнес-логикой из одной и той же таблицы?

StackOverflow https://stackoverflow.com/questions/5831264

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top