E-COMMERCE

MAPPARE UNA RELAZIONE MOLTI A MOLTI CON ENTITY FRAMEWORK CORE

NET CORE

Siamo arrivati al punto cruciale della nostra applicazione, infatti la committente ci ha chiesto di realizzare l’applicazione MyCourse perché vuole trarne un beneficio economico. Possiamo raggiungere questo obbiettivo, ad esempio, facendo acquistare i corsi e pagandoli on-line, funzionalità tipica dell’e-commerce. Completato l’acquisto andiamo a chiedere all’utente di esprimere una valutazione.

Relazione molti-a-molti

La relazione tra utenti e corsi è molti-a-molti, ad ogni corso possono iscriversi molti utenti, e ogni utente può iscriversi a molti corsi. Per creare la relazione molti a molti abbiamo bisogno di una terza tabella CourseStudents, che mette in relazione le tabelle AspNetUsers e Courses.

Relazione utenti corsi
Implementazione
Mappare relazione molti a molti

La nostra committente vorrà sapere anche queste altre informazioni.

Colonne tabella di raccordo
Nome tabella

FAR ISCRIVERE UN UTENTE AD UN CORSO

Vediamo quali sono gli step per acquistare un corso.

Iscrizione

La tabella interessata è quella che abbiamo creato precedentemente.

Tabella Subscriptions

Per il momento ci occuperemo delle fasi due e tre rimandando a breve la procedura di pagamento. Quando valorizziamo nel controller il valore PaymentDate non scegliamo DateTime.Now perché dipende dalle impostazioni del server, mentre DateTime.UtcNow no.

Accesso
DateTime input model

Ti mostro il codice nel Controller.

Controller

Abbiamo scritto il codice per l’iscrizione, ora andremo a creare una Policy che ci consentirà di nascondere il pulsante iscriviti una volta che l’iscrizione è avvenuta e per regolare l’accesso alle lezioni di un corso. La Policy verifica che l’utente si sia iscritto al corso. Il suo nome è CourseSubscriberRequirement.cs mentre il suo Handler è CourseSubscriberRequirementHandler.cs. Guarda l’implementazione, oramai dovresti aver maturato le conoscenze necessarie.

Policy Provider

LINK AL CODICE SU GITHUB

GITHUB

Scaricare il codice della sezione19 oppure il ramo master o clonare il repository GITHUB per avere a disposizione tutte le sezioni nel tuo editor preferito.