Comment à: Cartographie (NHibernate) plusieurs classes différentes avec la logique métier de la même table?

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

Question

Je travaille actuellement avec une base de données de sites contaminés qui contient une table qui contient des données pour 3 différentes sortes d'activités. Il a à voir avec SalesOrders et les lignes de commande. Dans l'ancienne application, nous avons pu ajouter 3 types de lignes de commande à chaque SalesOrder: produits, les taux horaires et des lignes de texte. il y a 15 ans, ce fut une solution rapide et sale pour obtenir des requêtes faciles à Delphes pour obtenir toutes les lignes dans un DataGrid. Chaque

Maintenant, je suis en train de construire le modèle d'objet en C # en utilisant NHibernate. J'ai fait 3 entités séparées sans une classe de base, en raison du fait que ces 3 types de lignes ont pas de réel lien logique d'affaires. Cependant, je veux obtenir ces 3 types dans une liste afin que je puisse les commander.

Je l'ai envisagé d'utiliser d'héritage, de table par classe, comme la table répond aux exigences (aucune colonne avec une contrainte non nulle). Ce n'est pas une étape logique cependant, puisque l'entreprise par type est complètement différent (seules choses communes sont userId, description et remarques). Peut-être un composant? mais comment cartographier les propriétés à 3 classes différentes sans une classe de base ou tout autre type de lien à l'exception du nom de la table?

J'espère que vous avez compris ce que je l'ai écrit. Je n'ai pas de code réel encore, je dessinais juste des choses sur papier sur la façon de traiter avec ce code.

Toute personne ici qui peut me aider sur le chemin?

Cordialement, Ted

Était-ce utile?

La solution

Vous pouvez mettre une interface sur les trois entités et la carte comme une classe de base, tous à la même table:

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
{
  // ...
}

Cartographie:

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top