Creazione nuovi progetti


MVC personalizzato

Di seguito le variazioni del Framework MVC standard di Microsoft.

  • Creazione del Modello.
    • Il modello deve ereditare dall'interfaccia IInCoreBaseModel.
    • Il modello deve implementare l'Attributo Table, anche se il nome della tabella coincide con quello del modello, per chiarezza.
    • Oltre ai normali attributi disponibili in MVC, il modello può includere gli attributi specifici di InCore:
      • InCoreRequired: Scorciatoia per il normale [Required], con la traduzione del messaggio in italiano.
      • InCoreEmailAddress: Annotazione equivalente a [EmailAddress], modificata per verificare le email tramite una espressione regolare.
      • InCoreCompare: Scorciatoia per il normale [Compare], con la traduzione del messaggio in italiano.
      • EarlierThan: Annotazione personalizzata, consente di specificare che un parametro deve essere precedente a un altro (di un certo tempo misurato in ore e minuti).
        Parametri:
        • ComparisonProperty: stringa, nome del parametro con cui confrontare quello a cui è applicato l'attributo.
        • Minutes: intero, opzionale, numero di minuti di differenza, default 0.
        • Hours: intero, opzionale, numero di ore di differenza, default 0.
      • LaterThan: Annotazione personalizzata, consente di specificare che un parametro deve essere successivo a un altro (di un certo tempo misurato in ore e minuti).
        Parametri:
        • ComparisonProperty: stringa, nome del parametro con cui confrontare quello a cui è applicato l'attributo.
        • Minutes: intero, opzionale, numero di minuti di differenza, default 0.
        • Hours: intero, opzionale, numero di ore di differenza, default 0.
      • InCoreMin: Annotazione personalizzata, consente di specificare che il valore decorato deve essere maggiore del valore fornito.
        Parametri:
        • Value: object, valore minimo consentito.
        • Type: System.TypeCode enum, tipologia del dato.
      • InCoreMax: Annotazione personalizzata, consente di specificare che il valore decorato deve essere minore del valore fornito.
        Parametri:
        • Value: object, valore massimo consentito.
        • Type: System.TypeCode enum, tipologia del dato.
    • Aggiungere il Modello a MyDbContext come DbSet<NomeModello>
  • Modello di una Vista.
    • Seguire i passaggi definiti precedentemente a parte per le seguenti operazioni:
      • Omettere l'Attributo Table.
      • [OPZIONALE] Definizione del Modello con l'Attributo Keyless se la Vista non possiede una chiave primaria.
      • All'interno di MyDbContext, nel metodo OnModelCreating, aggiungere la seguente istruzione:

        modelBuilder.Entity<CLASSE>(rc => { rc.HasNoKey(); rc.ToView("NOME_VISTA"); });

  • Generazione automatica del Controller (e delle View) a partire dal Modello.
    • Cliccare di destro sulla cartella Controllers e richiamare il comando Aggiungi --> Nuovo elemento di scaffolding...
    • Selezionare l'opzione Controller MVC con visualizzazioni, che usa Entity Framework.
    • Nella nuova finestra,
      • Selezionare il Modello dal menù a tendina
      • Selezionare il MyDbContext, se non specificato
      • Lasciare selezionate tutte le 3 spunte
      • [OPZIONALE] Impostare _ModalLayout nella casella di testo per prepararsi all'uso delle Modali
      • Modificare il nome del Controller, per evitare il plurale "all'inglese"
  • Modifiche ai Controller.
    • Far derivare il Controller da uno dei Controller standard presenti nel progetto:
      • MyContextController: Controller base per tutte le entità che usano MyDbContext.
      • MyCalendarController: Controller base per la gestione di entità Calendario.
      • MyFileController: Controller base per la gestione di entità di tipo File.
      • MyApiController: Controller base per la gestione delle API
    • Utilizzare il costruttore di default dei Controller base, passando i parametri necessari.
    • Rimuovere la variabile privata del DbContext, già presente nel Controller base.
    • Sostituire le istanze di _dbContext con DbContext
    • Creazione del metodo Get() contenente la lettura dell'intera tabella come IEnumerable<TIPO>, contenente tutte le Include necessarie per le Foreign Key.
  • Modifiche alle Viste.
    • Modificare o aggiungere un Layout alle Viste.
    • Modificare i form-group con i form-floating, impostando prima gli input delle label.

      Verificare la Vista /Home/Index_Empty per gli esempi di codice corretto per i vari tipi di input.

  • Aggiunta al Database.
    • Aprire Visualizza -> Altre finestre -> Console di Gestione Pacchetti
    • Utilizzare il comando seguente nella Console appena aperta per aggiungere le Migrazione:

      Add-Migration -Context MyDbContext "DESCRIZIONE DELLA MIGRATION"

    • Una volta generata correttamente la Migration, eseguire il seguente comando per scrivere le modifiche su DB:

      Update-Database -Context MyDbContext