Frage

Ich arbeite derzeit mit einer Brownfield -Datenbank, die eine Tabelle enthält, die Daten für 3 verschiedene Arten von Geschäftstätigkeit enthält. Es hat mit Salesorder und Bestelllinien zu tun. In der alten Anwendung konnten wir jedem Vertrieb 3 Arten von Bestellungen hinzufügen: Produkte, Stundensätze und Textlinien. Vor 15 Jahren war dies eine schnelle und schmutzige Lösung, um in Delphi einfache Abfragen zu erhalten, um alle Zeilen in einem Datagrid zu erhalten. Jeder

Jetzt versuche ich, das Objektmodell in C# mit NhiberNate zu erstellen. Ich habe 3 separate Entitäten ohne Basisklasse gemacht, da diese 3 Zeilentypen keine echte logische Verbindung haben. Ich möchte diese 3 Typen jedoch in eine Liste bringen, damit ich sie bestellen kann.

Ich habe darüber nachgedacht, die Erbschaft, Tabelle pro Klasse zu verwenden, da die Tabelle die Anforderungen entspricht (keine Spalten mit einer nicht-null-Zurückhaltung). Dies ist jedoch kein logischer Schritt, da das Geschäft pro Typ völlig unterschiedlich ist (nur gemeinsam sind Benutzer ID, Beschreibung und Bemerkungen). Vielleicht eine Komponente? Aber wie kann man die Eigenschaften auf 3 verschiedene Klassen ohne Basisklasse oder irgendeine Art von Link abbilden, außer dem Tabellennamen?

Ich hoffe ihr hat verstanden, was ich geschrieben habe. Ich habe noch keinen wirklichen Code, ich habe nur ein paar Sachen auf Papier geschleudert, wie man mit diesem Code umgeht.

Wer kann mir hier auf meinem Weg helfen?

Freundliche Grüße, Ted

War es hilfreich?

Lösung

Sie können eine Schnittstelle auf die drei Entitäten setzen und als Basisklasse in derselben Tabelle zuordnen:

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

Kartierung:

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top