Ereditarietà con Entity Framework Code First

0

Sto iniziando a lavorare su un nuovo progetto personale e sto cercando consigli per quanto riguarda l'impostazione delle mie lezioni.

La mia classe base è un utente. La classe User avrà le seguenti proprietà generali

  • ID utente
  • Nome utente
  • password
  • Indirizzo (questo sarà un tipo complesso / valore)

Avrò quindi una classe Subscriber che è un utente che ha scelto di sottoscrivere un piano che offro. La classe Subscriber avrà le sue proprietà in aggiunta a quella dell'utente, tra cui:

  • ID sottoscrittore
  • ID piano
  • Data di sottoscrizione
  • etc

L'ereditarietà è la strada da percorrere qui se l'utente è la classe base o è una chiave esterna dalla classe Subscriber to User nel modo migliore? Se si preferisce l'ereditarietà, quale metodo? TPH o TPT?

Il piano è di avere altre classi con la classe User che funga da base includendo Partecipanti e Volontari.

Grazie!

    
posta Mike 31.12.2013 - 15:49
fonte

2 risposte

3

Il mio primo pensiero, sulla falsariga di " preferisci la composizione all'ereditarieta ', non è necessaria l'ereditarietà (né la migliore rappresentazione del comune sistema "subscriber") e che la tua classe utente deve avere una raccolta di abbonamenti.

Le Iscrizioni sarebbero sostanzialmente le stesse che le hai descritte, ma senza il pezzo dell'eredità. Gli "Iscritti" di un particolare Piano sono la raccolta di Utenti che hanno sottoscritto il Piano.

Allo stesso modo con Partecipanti e Volontari.

    
risposta data 31.12.2013 - 16:11
fonte
-1

Questo è di 4 anni in ritardo, ma per chiunque altro chieda, progetta il tuo modello di dati in base ai seguenti punti:

  • Conserva una classe Subscription.cs con dettagli come Currency , BillingPlan , ecc.
  • Mantieni una classe astratta User.cs con i dettagli che hai fornito.
  • Conserva una classe Subscriber.cs che eredita User.cs poiché tutte le proprietà di User.cs sono necessarie in Subscriber.cs . Se solo alcune delle proprietà sono desiderate, quindi scegli composizione su ereditarietà .
  • Subscription.cs deve avere un GUID SubcriberID come chiave univoca e una proprietà di navigazione Subscriber . Nota che questa chiave non esiste in Subscriber.cs .
  • Se hai altre classi che avranno bisogno di tutte le proprietà di User.cs , consenti a quelle classi di ereditare semplicemente da User.cs . Se la tua applicazione non seguirà questa ereditarietà rigorosa, usa interfaces invece e componi come desideri.
risposta data 04.06.2017 - 17:37
fonte

Leggi altre domande sui tag