Condividi tramite


Procedura dettagliata: utilizzo del servizio del dominio nelle applicazioni ASP.NET

ASP.NET fornisce un controllo DomainSourceControl che può essere utilizzato dai controlli associati a dati, ad esempio il controllo GridView, per accedere al database e consentire all'utente di eseguire le operazioni di creazione, lettura, aggiornamento ed eliminazione (CRUD).

È importante notare che il servizio del dominio consente di disconnettere l'applicazione dal modello di database specifico offrendo il vantaggio di concentrarsi sulla logica di business e sulla creazione di codice facilmente portabile in un modello diverso.

Il servizio del dominio WCF RIA Services fornisce un modello per scrivere la logica dell'applicazione in esecuzione nel server e controlla l'accesso ai dati per le query, le modifiche e le operazioni personalizzate. Fornisce inoltre il supporto end-to-end per le attività comuni come la convalida dei dati, l'autenticazione e i ruoli integrando il client Silverlight e le applicazioni server ASP.NET.

In questa procedura dettagliata viene illustrato come accedere a un database da una pagina Web ASP.NET mediante il servizio del dominio RIA Services . Sebbene nella procedura dettagliata venga descritto il servizio del dominio in ASP.NET, l'utilizzo del servizio non è limitato alle applicazioni ASP.NET. In questa procedura dettagliata non viene affrontata l'integrazione del server ASP.NET con le applicazioni client Silverlight.

Nella procedura dettagliata sono contenute le procedure seguenti:

  • Creazione di un'applicazione Web ASP.NET

  • Utilizzo del servizio del dominio

  • Test del servizio del dominio

Prerequisiti

Per l'esecuzione di questa e di altre procedure dettagliate descritte nella documentazione di RIA Services è necessario che siano installati e configurati correttamente alcuni programmi prerequisiti quali Visual Studio 2010 e Silverlight Developer Runtime e SDK, oltre a WCF RIA Services e a WCF RIA Services Toolkit. È inoltre richiesta l'installazione e la configurazione di SQL Server 2008 R2 Express with Advanced Services e l'installazione del database AdventureWorks OLTP e LT.

Le istruzioni dettagliate per soddisfare tali prerequisiti vengono fornite negli argomenti all'interno del nodo Prerequisiti per WCF RIA Services. Seguire tali istruzioni prima di continuare con questa procedura dettagliata in modo da assicurarsi che si verifichi il minor numero possibile di problemi durante l'esecuzione della procedura dettagliata di RIA Services .

Creazione di un'applicazione Web ASP.NET

Per utilizzare il servizio del dominio, è necessario creare un'applicazione Web ASP.NET in grado di interagire con un database. Di seguito sono riportati i passaggi da eseguire:

  • Creazione di un'applicazione Web. Questo passaggio consente di creare l'ambiente per l'utilizzo del servizio del dominio.

  • Aggiunta di un database all'applicazione. Questo passaggio consente di scegliere il database per l'applicazione Web.

  • Creazione del modello di database. Questo passaggio consente di creare il modello che contiene le entità del database come tipi CLR. Tali tipi vengono utilizzati dal servizio del dominio per interagire con il database. È possibile utilizzare il modello di dati ADO.NET Entity Framework o LINQ to SQL.

Nella procedura seguente viene illustrato come creare l'applicazione Web ASP.NET.

Per creare un'applicazione Web ASP.NET

  1. Scegliere Nuovo dal menu File di Visual Studio 2010, quindi fare clic su Progetto.

    Verrà visualizzata la finestra di dialogo Nuovo progetto.

  2. In Modelli installati espandere Visual C# o Visual Basic, quindi selezionare Web.

  3. Nell'elenco di modelli selezionare Applicazione Web ASP.NET vuota.

  4. Assegnare al progetto il nome UsingDomainService, specificare un percorso, quindi fare clic su OK.

  5. Compilare l'applicazione.

Nella procedura seguente viene illustrato come aggiungere un database all'applicazione. Questo database contiene la tabella a cui verrà effettuato l'accesso per la visualizzazione e la modifica.

Per aggiungere il database all'applicazione Web

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto, scegliere Aggiungi, fare clic su Aggiungi cartella ASP.NET, quindi su App_Data.

    La cartella App_Data verrà aggiunta al progetto.

  2. Fare clic con il pulsante destro del mouse sulla cartella App_Data, scegliere Aggiungi, quindi fare clic su Elemento esistente.

    Verrà visualizzata la finestra di dialogo Aggiungi elemento esistente.

  3. Specificare il percorso del file di database AdventureWorksLT (AdventureWorksLT_Data.mdf).

    Nell'illustrazione seguente viene mostrata la finestra di dialogo Aggiungi elemento esistente.

    Client del servizio di dominio ASP.NET: Aggiungi elemento esistente

  4. Fare clic su Aggiungi.

    Questa operazione consente la creazione di una copia del file di database nel progetto. Per ulteriori informazioni, vedere Procedura: connettersi al database AdventureWorksLT utilizzando un file con estensione MDF.

Nella procedura seguente viene illustrato come creare il modello di dati che contiene le classi che rappresentano le tabelle di database. In questa procedura dettagliata viene utilizzato un modello di dati ADO.NET Entity Framework, ma è possibile utilizzare anche un modello di dati LINQ to SQL.

Per creare il modello di dati

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto, scegliere Aggiungi, quindi fare clic su Nuovo elemento.

    Verrà visualizzata la finestra di dialogo Aggiungi nuovo elemento.

  2. In Modelli installati selezionare Dati.

  3. Nell'elenco di modelli selezionare ADO.NET Entity Data Model.

  4. Assegnare al modello di database il nome AdventureWorksLT.edmx, quindi fare clic su Aggiungi.

    Verrà visualizzata la Procedura guidata Entity Data Model.

  5. Nella schermata Scegli contenuto Model selezionare Genera da database.

    Nell'illustrazione seguente viene mostrata la finestra di dialogo Scegli contenuto Model.

    Client del servizio di dominio ASP.NET: Scegli contenuto Model

  6. Scegliere Avanti.

  7. Nella schermata Seleziona connessione dati selezionare AdventureWorksLT_Data.mdf nell'elenco a discesa in Specificare la connessione dati che deve essere utilizzata dall'applicazione per connettersi al database.

  8. Verificare che la casella di controllo Salva impostazioni stringa di connessione entity in Web.Config come: sia selezionata. È possibile lasciare il nome della stringa di connessione predefinito.

    Nell'illustrazione seguente viene mostrata la finestra di dialogo Seleziona connessione dati.

    Client del servizio di dominio ASP.NET: Scegli la connessione dati

  9. Scegliere Avanti.

    Nella procedura guidata viene visualizzata una pagina in cui è possibile specificare quali oggetti di database includere nel proprio modello.

  10. Nella schermata Seleziona oggetti di database selezionare il nodo Tabelle per selezionare tutte le tabelle del database.

    Nell'illustrazione seguente viene mostrata la finestra di dialogo Seleziona oggetti di database.

    Client del servizio di dominio ASP.NET: Scegli oggetti di database

  11. Verificare che la casella di controllo Includi colonne di chiavi esterne nel modello sia selezionata. È possibile lasciare lo spazio dei nomi del modello predefinito.

  12. Scegliere Fine.

    Verrà visualizzato ADO.NET Entity Data Model Designer. È stato creato il modello di dati che rappresenta il database AdventureWorksLT.

  13. Chiudere la finestra di progettazione.

  14. Compilare l'applicazione.

    La compilazione rende disponibile la classe del contesto AdventureWorksLT_DataEntities per il servizio del dominio nella procedura successiva.

Utilizzo del servizio del dominio

In questa procedura vengono descritti i passaggi da eseguire per utilizzare il servizio del dominio in un'applicazione ASP.NET. Tali passaggi sono:

  • Aggiunta di una classe di servizio del dominio al progetto. Questo passaggio consente di creare la classe con cui l'applicazione può eseguire le operazioni CRUD del database e con cui soprattutto è possibile includere la logica di business. Questa classe funziona a livello server o a livello intermedio.

  • Creazione della logica di business. Questo passaggio consente di includere il codice (logica di business) nella classe di servizio del dominio.

  • Dichiarazione del controllo DomainDataSource. Questo passaggio viene eseguito in un markup della pagina in modo che l'utente possa interagire con il database. Questo controllo funziona a livello client o a livello di presentazione.

Nella procedura seguente viene illustrato come aggiungere il servizio dati del dominio al progetto.

Per aggiungere una classe di servizio del dominio al progetto

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto, scegliere Aggiungi, quindi fare clic su Nuovo elemento.

  2. In Modelli installati selezionare Web.

  3. Nell'elenco di modelli selezionare Classe di servizio del dominio.

  4. Assegnare un nome al file AdventureWorksDomainService.cs o AdventureWorksDomainService.vb, quindi fare clic su Aggiungi.

    Verrà visualizzata la finestra di dialogo Aggiungi una nuova classe di servizio del dominio. Nella casella Nome della classe di servizio del dominio: sarà indicato il nome specificato.

  5. Selezionare la casella di controllo Abilita l'accesso client.

  6. Nell'elenco a discesa Oggetti DataContext/ObjectContext disponibili: selezionare AdventureWorksLT_DataEntities (Entity Framework). Se l'elenco a discesa è vuoto, l'applicazione non è stata compilata. Uscire dalla finestra di dialogo Aggiungi una nuova classe di servizio del dominio, compilare l'applicazione e ripetere i passaggi precedenti. 

  7. Nell'elenco Entità selezionare la tabella Product.

  8. Per la tabella Product selezionare la casella di controllo Abilita modifica.

  9. Selezionare la casella di controllo Genera classi associate per i metadati.

    Nell'illustrazione seguente viene mostrata la finestra di dialogo Aggiungi una nuova classe di servizio del dominio.

    Client del servizio di dominio ASP.NET: Aggiungi una nuova classe DomainService

  10. Fare clic su OK.

    Verranno creati la classe AdventureWorksDomainService e il file di metadati correlato. La classe contiene i metodi per consentire le operazioni CRUD del database. È possibile modificare sia la classe che i file di metadati in modo da includere la logica di business. Nella procedura successiva verrà illustrato un esempio semplice. Si noti che i riferimenti al progetto sono stati aggiornati per contenere gli assembly richiesti e il file Web.config è stato aggiornato per contenere tutti gli elementi di configurazione necessari.

  11. Scegliere Salva tutto dal menu File.

Nella procedura seguente viene illustrato come personalizzare la classe AdventureWorksDomainService e il file di metadati correlato in modo da includere la logica di business. La personalizzazione è molto semplice, ma rende l'idea delle modifiche che è possibile effettuare.

Per creare la logica di business

  1. In Esplora soluzioni aprire il file AdventureWorksDomainService.cs o AdventureWorksDomainService.vb.

  2. Modificare il metodo UpdateProduct per includere la logica di convalida del campo ListPrice, come illustrato nel codice seguente. Aggiornare inoltre il campo ModifiedDate utilizzando la data corrente.

    public void UpdateProduct(Product currentProduct)
    {
      if ((currentProduct.EntityState == EntityState.Detached))
      {
        // Custom logic: set a lower limit for the price.
        if (currentProduct.ListPrice < 5)
          throw new ValidationException("The list price must be >= 5.");
        this.ObjectContext.Products.AttachAsModified(currentProduct,
           this.ChangeSet.GetOriginal(currentProduct));
        // Custom logic: set the date to the current value.
        currentProduct.ModifiedDate = DateTime.Today;
      }
    }
    
    Public Sub UpdateProduct(ByVal currentProduct As Product)
      If (currentProduct.EntityState = EntityState.Detached) Then
        ' Custom logic: set a lower limit for the price.
        If currentProduct.ListPrice < 5 Then
          Throw New ValidationException("The list price must be >= 5.")
        End If
        Me.ObjectContext.Products.AttachAsModified(currentProduct, _
          Me.ChangeSet.GetOriginal(currentProduct))
        ' Custom logic: set the date to the current value.
        currentProduct.ModifiedDate = DateTime.Today
      End If
    End Sub
    

    Se la convalida non riesce, viene generata un'eccezione e viene inviato un messaggio di errore alla pagina in modo da essere visualizzato dall'utente.

  3. Modificare il metodo GetProducts per impostare la logica di ordinamento affinché Entity Framework funzioni correttamente, come illustrato nel codice seguente.

    public IQueryable<Product> GetProducts()
    {
      return this.ObjectContext.Products.OrderBy(p => p.ProductID);
    } 
    
    Public Function GetProducts() As IQueryable(Of Product)
      Return Me.ObjectContext.Products.OrderBy(Function(p) p.ProductID)
    End Function
    
  4. Salvare e chiudere il file.

  5. In Esplora soluzioni aprire il file AdventureWorksDomainService.metadata.cs o AdventureWorksDomainService.metadata.vb.

  6. Aggiungere l'attributo Required all'entità del campo dati Color, come illustrato nel codice seguente.

    Con questo attributo, si forza il campo dati a non essere vuoto come consentito dal database. Se l'utente immette una stringa vuota, viene generato un errore.

    [Required(AllowEmptyStrings=false, 
      ErrorMessage="Color is required")]
    public string Color{ get; set; }
    
    <Required(AllowEmptyStrings:=False, ErrorMessage:="Color is required")> _
    Public Property Color As String
    
  7. Salvare e chiudere il file di metadati.

  8. Compilare l'applicazione.

Nella procedura seguente viene illustrato come dichiarare il controllo DomainDataSource in un markup della pagina in modo tale che l'utente possa interagire con il database.

Per dichiarare il controllo DomainDataSource in una pagina

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto, scegliere Aggiungi, quindi fare clic su Nuovo elemento.

  2. In Modelli installati fare clic su Web.

  3. Nell'elenco di modelli selezionare Web Form.

  4. Assegnare un nome al file Default.aspx, quindi fare clic su Aggiungi.

  5. Aprire Default.aspx nella visualizzazione Progettazione.

  6. Dal gruppo Generale o Dati della Casella degli strumenti aggiungere un controllo DomainDataSource alla pagina.

    Verrà visualizzato DomainDataSource con il menu Attività di DomainDataSource aperto.

    Se il controllo non è elencato, fare clic sul menu Strumenti, quindi su Scegli elementi della Casella degli strumenti. Nella finestra di dialogo Scegli elementi della Casella degli strumenti fare clic sulla scheda Componenti di .NET Framework, selezionare la casella di controllo DomainDataSource, quindi fare clic su OK.

  7. Scegliere Configura origine dati dal menu Attività di DomainDataSource.

    Verrà visualizzata la procedura guidata Configura origine dati.

  8. Nella schermata Selezionare un servizio del dominio selezionare la classe creata UsingDomainService.AdventureWorksDomainService nell'elenco Tipo di servizio del dominio:.

    Nell'illustrazione seguente viene mostrata la schermata Selezionare un servizio del dominio.

    Client del servizio di dominio ASP.NET: Scegli il servizio di dominio

  9. Scegliere Avanti.

  10. Nella schermata Configura l'accesso ai dati selezionare il metodo IQueryable<Product> GetProducts().

  11. Selezionare le caselle di controllo Abilita inserimenti, Abilita aggiornamenti e Abilita eliminazioni.

    Nella figura seguente viene illustrata la schermata Configura l'accesso ai dati.

    Client del servizio di dominio ASP.NET: Scegli l'accesso al dominio

  12. Scegliere Fine.

  13. Nella Casella degli strumenti aggiungere un controllo GridView alla pagina dalla scheda Dati.

    Verrà visualizzato GridView con il menu Attività di GridView aperto.

  14. Nel menu Attività di GridView selezionare DomainDataSource1 nell'elenco Scegli origine dati.

    Si tratta dell'ID del controllo DomainDataSource creato nei passaggi precedenti.

  15. Nel menu Attività di GridView fare clic su Modifica colonne.

    Verrà visualizzata la finestra di dialogo Campi.

  16. Deselezionare la casella di controllo Genera campi automaticamente.

  17. Nel riquadro Campi selezionati: eliminare tutti i campi ad eccezione di Name, Color, ListPrice e ModifiedDate.

  18. Fare clic su OK.

  19. Se si desidera, nel menu Attività di GridView è possibile abilitare il paging, l'ordinamento e la selezione selezionando le relative caselle di controllo.

  20. Salvare il file e passare alla visualizzazione Origine.

  21. Selezionare GridView.

  22. Nel finestra Proprietà impostare la proprietà DataKeyNames nell'elenco separato da virgole seguente di tutte le colonne che non sono visualizzate: ProductID, ProductNumber, StandardCost, Size, Weight, ProductCategoryID, ProductModelID, SellStartDate, SellEndDate, DiscontinuedDate, ThumbNailPhotoFileName, rowguid.

    Tale operazione è necessaria affinché il controllo DomainDataSource possa eseguire le operazioni CRUD.

  23. Impostare la proprietà AutoGenerateEditButton su True per consentire la modifica e l'eliminazione delle righe di tabella.

  24. Nella visualizzazione Origine sostituire l'elemento Columns con il markup seguente.

    Con l'utilizzo dei modelli personalizzati, questo markup consente la convalida dei valori dei campi dati Color e ListPrice prima che vengano inviati al server durante il postback. Viene inoltre creato un controllo LinkButton di eliminazione che richiede l'autorizzazione dell'utente prima che venga eseguita un'eliminazione della riga.

      <Columns>
        <asp:TemplateField>
          <ItemTemplate>
            <asp:LinkButton ID="LinkButton1"  CommandName="Delete" Text="Delete"
              ForeColor="#333333"  OnClientClick='return confirm("Are you sure you want to delete this row?");'/>
          </ItemTemplate>
        </asp:TemplateField>
    
        <asp:CommandField ShowSelectButton="True" />
        <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
        <asp:TemplateField>
          <HeaderTemplate>Color</HeaderTemplate>
          <ItemTemplate>
            <%# Eval("Color") %>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox ID="ColorID"  Text='<%# Bind("Color") %>'/>
            <cc1:DomainValidator ID="DomainValidator2"   DataField="Color"/>
          </EditItemTemplate>
        </asp:TemplateField>
    
        <asp:TemplateField>
          <HeaderTemplate>ListPrice</HeaderTemplate>
          <ItemTemplate>
            <%# Eval("ListPrice")%>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox ID="ListPriceID"  Text='<%# Bind("ListPrice") %>'/>
            <cc1:DomainValidator ID="DomainValidator3"  DataField="ListPrice"/>
           </EditItemTemplate>
         </asp:TemplateField>
    
         <asp:BoundField DataField="ModifiedDate" HeaderText="ModifiedDate" SortExpression="ModifiedDate" />
      </Columns>
    
  25. Prima del controllo GridView aggiungere il markup seguente per consentire la visualizzazione degli errori di convalida:

    <asp:ValidationSummary ID="ValidationSummary1"  />
    <cc1:DomainValidator  ControlToValidate="GridView1"/>
    
  26. Salvare il file Default.aspx.

  27. Compilare l'applicazione.

Test del servizio del dominio

In questa procedura viene illustrato come testare le funzionalità del servizio del dominio utilizzando il controllo GridView. La procedura verifica quanto segue:

  • L'interazione con il database tramite la logica di business personalizzata funziona come previsto.

  • In ASP.NET vengono eseguite le modifiche apportate dall'utente ai campi del database.

  • In ASP.NET vengono visualizzati i messaggi di errore generati dalla logica personalizzata.

Test del servizio del dominio

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla pagina Default.aspx, quindi scegliere Visualizza nel browser.

    Nel browser verrà visualizzata una pagina con la tabella Product.

  2. In una riga qualsiasi fare clic su Modifica e modificare il valore della colonna ListPrice immettendo un valore minore di 5.

  3. Nella stessa riga fare clic su Aggiorna.

    Verrà visualizzato un errore personalizzato in cui viene indicato che il campo deve essere maggiore o uguale a 5.

  4. Nella stessa riga immettere un valore maggiore di 5 per la colonna ListPrice.

  5. Nella stessa riga fare clic su Aggiorna.

    In ASP.NET vengono aggiornati i campi dati ListPrice e ModifiedDate nel database.

  6. In una riga qualsiasi fare clic su Modifica e modificare il valore della colonna Color immettendo una stringa vuota.

  7. Nella stessa riga fare clic su Aggiorna.

    In ASP.NET viene visualizzato un errore di convalida personalizzato.

  8. Nella stessa riga immettere un valore non costituito da una stringa vuota per la colonna Color.

  9. Nella stessa riga fare clic su Aggiorna.

    In ASP.NET vengono aggiornati i campi dati Color e ModifiedDate nel database.

Vedere anche

Attività

Procedura: aggiungere la logica di business al servizio del dominio

Concetti

Creazione di soluzioni Servizi RIA