Come fare: Mapping (NHibernate) classi multiple con logica di business diverso da quello stesso tavolo?
-
27-10-2019 - |
Domanda
Al momento sto lavorando con un database brownfield, che contiene una tabella che contiene i dati per 3 diversi tipi di attività. Ha a che fare con SalesOrders e righe d'ordine. Nella vecchia applicazione, siamo stati in grado di aggiungere 3 tipi di righe d'ordine a ogni SalesOrder: i prodotti, le tariffe orarie e le linee di testo. 15 anni fa, questa era una soluzione rapida e sporca per ottenere le query semplici in Delphi per ottenere tutte le linee in una datagrid. Ogni
Ora sto cercando di costruire il modello a oggetti in C # utilizzando NHibernate. Ho fatto 3 entità separate, senza una classe di base, a causa del fatto che questi 3 tipi di linea non hanno alcun nesso logico vero e proprio business. Tuttavia, voglio ottenere questi 3 tipi in una lista in modo che io possa ordinare.
Ho pensato di utilizzare ereditarietà, tabella per ogni classe, come la tavola soddisfa i requisiti (nessuna colonna con un sistema di ritenuta non-null). Questo non è un passo logico, però, dal momento che il business in base alla tipologia è completamente diverso (solo cose in comune sono userId, descrizione e le osservazioni). Forse un componente? ma come mappare le proprietà a 3 classi diverse, senza una classe di base o qualsiasi tipo di collegamento, tranne il nome della tabella?
spero che voi ragazzi capito quello che ho scritto. Non ho il codice vero e proprio ancora, stavo solo abbozzando alcune cose su carta su come trattare con questo codice.
Chiunque qui che mi può aiutare per la mia strada?
Cordiali saluti, Ted
Soluzione
Si potrebbe mettere un'interfaccia sui tre entità e la mappa come classe base, tutto allo stesso tavolo:
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
{
// ...
}
Mapping:
<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>