Procedura dettagliata: aggiunta della convalida a classi di entità
La convalida dei dati rappresenta il processo mediante cui si conferma che i valori immessi negli oggetti dati sono conformi ai vincoli presenti nello schema di un oggetto, oltre che alle regole stabilite per l'applicazione. Per ridurre gli errori e il numero potenziale di round trip tra un'applicazione e il database, è opportuno convalidare i dati prima di inviare aggiornamenti al database sottostante.
In Progettazione relazionale oggetti sono disponibili metodi parziali che consentono agli utenti di estendere il codice generato nella finestra di progettazione, che viene eseguito durante i comandi di inserimento, aggiornamento ed eliminazione di entità complete nonché durante e dopo le modifiche di singole colonne.
In questa procedura dettagliata vengono fornite istruzioni specifiche per l'aggiunta della convalida alle classi di entità LINQ to SQL e viene sviluppato l'argomento Procedura dettagliata: creazione di classi LINQ to SQL (Progettazione relazionale oggetti).
In questa procedura dettagliata verrà illustrato come completare le seguenti attività:
Aggiunta della convalida per le modifiche ai dati di una specifica colonna.
Aggiunta della convalida per gli aggiornamenti a un'entità completa.
Prerequisiti
Per completare questa procedura dettagliata, è necessario disporre dei seguenti elementi:
Progetto creato in Procedura dettagliata: creazione di classi LINQ to SQL (Progettazione relazionale oggetti).
Accesso al database di esempio Northwind. Per ulteriori informazioni, vedere Procedura: installare database di esempio.
Nota
Nel computer in uso è possibile che vengano visualizzati nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per ulteriori informazioni vedere Impostazioni di Visual Studio.
Apertura della soluzione ORDesignerWalkthrough
Per aprire la soluzione ORDesignerWalkthrough
Scegliere Apri dal menu File, fare clic su Progetto/Soluzione, quindi passare al percorso del file ORDesignerWalkthrough.sln.
Nota
Il file ORDesignerWalkthrough.sln viene creato nell'argomento Procedura dettagliata: creazione di classi LINQ to SQL (Progettazione relazionale oggetti) e costituisce un prerequisito per il completamento di questa procedura dettagliata. Completare l'argomento Procedura dettagliata: creazione di classi LINQ to SQL (Progettazione relazionale oggetti) e al termine salvare la soluzione, se non è stata ancora salvata.
Aggiunta della convalida per le modifiche al valore di una specifica colonna
In questa parte della procedura dettagliata, verrà aggiunta logica di convalida alla colonna RequiredDate di un ordine. Verrà inoltre aggiunto codice per verificare che RequiredDate corrisponda a una data precedente rispetto alla data odierna. Poiché la convalida viene eseguita nella definizione di classe effettiva anziché nell'interfaccia utente, se la convalida del valore ha esito negativo, viene generata un'eccezione.
Per convalidare i dati durante la modifica del valore di una colonna
Aprire il file Northwind.dbml in O/R Designer (fare doppio clic sul file Northwind.dbml in Esplora soluzioni).
Poiché si sta aggiungendo la convalida alla colonna RequiredDate di un ordine, fare clic con il pulsante destro del mouse sulla classe Order nella finestra di progettazione, quindi scegliere Visualizza codice.
Viene aperto l'editor del codice con una classe parziale per l'ordine.
Posizionare il cursore nella classe Order parziale.
Per i progetti di Visual Basic:
Espandere l'elenco Nome metodo (casella combinata (Dichiarazioni)).
Fare clic su OnRequiredDateChanging.
Viene aggiunto un metodo OnRequiredDateChanging alla classe Order parziale.
Aggiungere il seguente codice all'interno del metodo OnRequiredDataChanging per assicurarsi che il valore immesso per RequiredDate non corrisponda a una data precedente rispetto alla data corrente:
If value.HasValue Then If value < Today Then Throw New Exception("Required Date cannot be in the past") End If End If
Per i progetti C#:
Aggiungere il seguente codice alla classe Order parziale per assicurarsi che il valore immesso per RequiredDate non corrisponda a una data precedente rispetto alla data corrente:
partial void OnRequiredDateChanging(System.DateTime? value) { if (value < System.DateTime.Today) { throw new System.Exception("Required Date cannot be in the past"); } }
Test dell'applicazione
Il test della logica di convalida richiede l'esecuzione dell'applicazione e l'immissione di valori che determineranno l'esito negativo della convalida.
Per eseguire il test dell'applicazione
Premere F5.
Nella griglia in cui vengono visualizzati gli ordini, modificare la colonna RequiredDate di un ordine in una data precedente alla data corrente e spostarsi dal record per accettare la modifica.
Il nuovo valore determina l'esito negativo della convalida e viene generata un'eccezione, come previsto.
Chiudere il form. Interrompere il debug.
Gestione dell'errore di convalida in DataGridView
Il test dell'applicazione ha generato un messaggio di errore di DataGridView che indica agli sviluppatori di gestire l'evento DataError. Nella procedura riportata di seguito viene mostrato come gestire tale evento.
Per gestire l'errore di convalida in DataGridView
Aprire Form1 nell'editor del codice.
Selezionare OrdersDataGridView.
Creare un gestore eventi per l'evento DataError.
Aggiungere codice per visualizzare l'errore. Il gestore eventi avrà il seguente aspetto:
Private Sub OrdersDataGridView_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles OrdersDataGridView.DataError MessageBox.Show(e.Exception.Message) End Sub
private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) { MessageBox.Show(e.Exception.Message); }
Aggiunta della convalida per gli aggiornamenti a una classe di entità
Oltre a controllare i valori durante le modifiche, è possibile convalidare i dati quando si tenta di aggiornare una classe di entità completa. La convalida durante un tentativo di aggiornamento consente di confrontare i valori di più colonne, se richiesto dalle regole business. Ad esempio, nella procedura riportata di seguito viene mostrato come convalidare l'utilizzo dell'azienda di spedizione corretta se il costo di spedizione è inferiore a un limite impostato.
Per convalidare i dati durante un aggiornamento a una classe di entità
Aprire il file Northwind.dbml in O/R Designer (fare doppio clic sul file Northwind.dbml in Esplora soluzioni).
Poiché si sta aggiungendo la convalida all'aggiornamento di una classe Order completa, i metodi parziali a cui è necessario accedere sono situati nella classe DataContext generata (NorthwindDataContext). Fare clic con il pulsante destro del mouse su un'area vuota in Progettazione relazionale oggetti, quindi scegliere Visualizza codice.
Viene aperto l'editor del codice nella classe parziale relativa a NorthwindDataContext.
Posizionare il cursore nella classe parziale NorthwindDataset.
Per i progetti di Visual Basic:
Espandere l'elenco Nome metodo (casella combinata (Dichiarazioni)).
Fare clic su UpdateOrder.
Viene aggiunto un metodo UpdateOrder alla classe NorthwindDataContext parziale.
Il recapito non viene eseguito da Federal Shipping se il valore Freight è inferiore a 10. Pertanto, aggiungere il seguente codice all'interno del metodo UpdateOrder per assicurarsi che il valore immesso per ShipVia non sia Federal Shipping se il valore Freight è inferiore a 10:
If (instance.ShipVia = 3) And (instance.Freight < 10) Then Dim ErrorMessage As String = "Federal Shipping " & _ "does not deliver for less than 10. " & _ "You must use a different shipper." Throw New Exception(ErrorMessage) End If
Per i progetti C#:
Aggiungere il seguente codice alla classe NorthwindDataContext parziale per assicurarsi che il valore immesso per ShipVia non sia Federal Shipping se il valore Freight è inferiore a 10:
partial void UpdateOrder(Order instance) { if ((instance.ShipVia == 3) && (instance.Freight < 10)) { string ErrorMessage = "Federal Shipping " + "does not deliver for less than 10. " + "You must use a different shipper."; throw new System.Exception(ErrorMessage); } }
Test dell'applicazione
Per testare la logica di convalida, eseguire l'applicazione e immettere valori che determineranno l'esito negativo della convalida.
Per eseguire il test dell'applicazione
Premere F5.
Nella griglia in cui vengono visualizzati gli ordini, individuare un record per il quale ShipVia corrisponda a 3. Modificare Freight in 5 e spostarsi dal record per accettare la modifica.
Poiché la convalida non viene eseguita fino a quando il record non viene effettivamente inviato per l'aggiornamento, non avrà ancora esito negativo.
Fare clic sul pulsante Salva nel form.
A questo punto la convalida ha esito negativo e viene generata l'eccezione.
Chiudere il form. Interrompere il debug.
Passaggi successivi
A seconda dei requisiti dell'applicazione, è possibile eseguire diverse operazioni dopo l'aggiunta della convalida alle classi di entità LINQ to SQL. È inoltre possibile apportare il seguente miglioramento all'applicazione:
- Creazione di altre query LINQ per ordinare e filtrare i dati. Per informazioni, vedere Query LINQ to SQL.
Vedere anche
Attività
Procedura dettagliata: creazione di classi LINQ to SQL (Progettazione relazionale oggetti)
Concetti
Novità dello sviluppo di applicazioni di dati