Ho 4 sottoclassi: Video
, Image
, Note
e Form
. Ognuno contiene diversi tipi di dati. Ad esempio, la classe Image
contiene un percorso per il file immagine su disco e le proprietà dell'immagine e la classe Form
contiene i valori del campo modulo. L'elemento comune tra ogni elemento, tuttavia, è le coordinate GPS e direzione, in modo da avere la seguente classe di base astratta:modello una classe base astratta e sottoclassi in un database
public abstract class Content
{
public float? Latitude { get; set; }
public float? Longitude { get; set; }
public float? Heading { get; set; }
}
Tuttavia, quando ho velato è su come modellare questo in un database. Attualmente ho un tavolo chiamato Events
(per esempio, diciamo che un evento è una festa di compleanno) e 4 tavoli (Videos
, Images
, Notes
e Forms
). Ogni tabella ha una chiave esterna che rimanda alla chiave primaria Events
.
Utilizzando LINQ-to-SQL, ottengo 5 classi per ogni tabella. Questo va bene se voglio solo un tipo di dati, ad esempio Event.Images
, ma quello che voglio fare è contare il numero totale di "contenuti" di un Event
e ottenere le coordinate GPS. Posso regolare facilmente il conteggio semplicemente usando Event.Images.Count() + Event.Videos.Count() + ...
, ma non posso fare lo stesso per le coordinate GPS. C'è un modo in cui posso modellare il database in modo che io possa usare una classe base per ogni articolo ed essere ancora in grado di ottenere l'elemento fortemente tipizzato quando devo vedere i suoi dati?
Grazie per il link. Non danno esattamente una buona descrizione su come usare i modelli, ma mi dà un punto di partenza per fare più ricerca. Personalmente, ho sempre pensato che il modello a tabella singola fosse una cattiva idea, perché significa che se aggiungi una nuova sottoclasse, dovrai aggiungere nuove colonne per i suoi dati, e questo può mongolfiera a una dimensione indesiderabile, anche se per applicazioni più piccole posso vedere il merito di usarlo. –
Ya, ci sono dei compromessi definitivi. Dipende solo dalla probabilità di aggiungere nuovi tipi. Se improbabile, potrebbe essere meglio evitare di attraversare più tabelle e utilizzare la tabella singola. Se probabile, uno degli altri modelli. E, sì, quei link sono piuttosto scarsi perché vogliono che tu compri il libro :-) È un buon libro - vale la pena di pensarlo. – SingleShot