Procédure pas à pas : Utilisation du service de domaine dans les applications ASP.NET

ASP.NET fournit un contrôle DomainSourceControl qui peut être utilisé par des contrôles liés aux données, tels que le contrôle GridView, pour accéder à la base de données et permettre à l'utilisateur d'effectuer des opérations de création, lecture, mise à jour et suppression (CRUD).

Il importe de noter que le service de domaine vous permet de détacher votre application du modèle de base de données spécifique. Cela présente l'avantage de vous permettre de vous concentrer sur la logique métier et la création d'un code facilement transposable à un modèle différent.

Le service du domaine Services RIA WCF fournit un modèle pour écrire la logique d'application qui s'exécute sur le serveur et contrôle l'accès aux informations pour les requêtes, les modifications et les opérations personnalisées. Il fournit également la prise en charge de bout en bout des tâches courantes telles que la validation des données, l'authentification et les rôles en intégrant des applications client Silverlight et des applications serveur ASP.NET.

Cette procédure pas à pas indique comment accéder à une base de données à partir d'une page Web ASP.NET à l'aide du service de domaine Services RIA . Bien que cette procédure pas à pas décrive le service de domaine dans ASP.NET, l'utilisation de ce service n'est pas limitée aux applications ASP.NET. Cette procédure pas à pas ne traite pas de l'intégration du serveur ASP.NET avec les applications clientes Silverlight.

Cette procédure pas-à-pas contient les procédures suivantes :

  • Création d'une application Web ASP.NET

  • Utilisation du service de domaine

  • Test du service de domaine

Configuration requise

Ces tâches, ainsi que les autres procédures pas à pas présentées dans la documentation des Services RIA , nécessitent au préalable l'installation et la configuration correctes de plusieurs programmes, tels que Visual Studio 2010 et le runtime Developer et le kit de développement logiciel Silverlight, en plus des Services RIA WCF et du kit de ressources des Services RIA WCF. Ces procédures nécessitent également l'installation et la configuration de SQL Server 2008 R2 Express with Advanced Services et l'installation de la base de données AdventureWorks OLTP et LT.

Vous trouverez des instructions détaillées pour satisfaire chacune de ces conditions préalables dans les rubriques du nœud Conditions préalables pour les Services RIA WCF. Suivez ces instructions avant de poursuivre, pour être sûr de rencontrer le moins de problèmes possibles en effectuant ces procédures pas à pas des Services RIA .

Création d'une application Web ASP.NET

Pour utiliser le service de domaine, vous devez créer une application Web ASP.NET capable d'interagir avec une base de données. Voici les étapes que vous devez exécuter :

  • Création d'une application Web Cela fournit l'environnement nécessaire pour utiliser le service de domaine.

  • Ajout d'une base de données à l'application. Cela vous permet de choisir la base de données pour votre application Web.

  • Création du modèle de base de données. Vous créez le modèle qui contient les entités de base de données sous la forme de types CLR. Ce sont les types utilisés par le service de domaine pour interagir avec la base de données. Vous pouvez vous utiliser le modèle de données ADO.NET Entity Framework ou LINQ to SQL.

La procédure suivante indique comment créer une application Web ASP.NET.

Pour créer une application Web ASP.NET

  1. Dans Visual Studio 2010, cliquez sur le menu Fichier, cliquez sur Nouveau, puis sur Projet.

    La boîte de dialogue Nouveau projet s'affiche.

  2. Sous Modèles installés, développez Visual C# ou Visual Basic, puis sélectionnez Web.

  3. Dans la liste des modèles, sélectionnez Application Web ASP.NET vide.

  4. Nommez le projet UsingDomainService, spécifiez un emplacement, puis cliquez sur OK.

  5. Générez l'application.

La procédure suivante indique comment ajouter une base de données à l'application. Cette base de données contient la table qui sera accessible pour l'affichage et la modification.

Pour ajouter la base de données à l'application Web

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, cliquez sur Ajouter, puis sur Ajouter le dossier ASP.NET et enfin sur App_Data.

    Cela ajoute le dossier App_Data au projet.

  2. Cliquez avec le bouton droit sur le dossier App_Data, cliquez sur Ajouter, puis sur Élément existant.

    La boîte de dialogue Ajouter un élément existant s'affiche.

  3. Spécifiez l'emplacement du fichier de base de données AdventureWorksLT (AdventureWorksLT_Data.mdf).

    L'illustration suivante montre la boîte de dialogue Ajouter un élément existant.

    Client de service de domaine ASP.NET : Ajouter un élément existant

  4. Cliquez sur Ajouter.

    Cette procédure crée une copie du fichier de base de données dans le projet. Pour plus d'informations, consultez Comment : établir une connexion avec la base de données AdventureWorksLT à l'aide d'un fichier .MDF.

La procédure suivante indique comment créer le modèle de données contenant les classes qui représentent les tables de base de données. Dans cette procédure pas à pas, vous allez utiliser un modèle de données ADO.NET Entity Framework. Vous pourriez également utiliser un modèle de données LINQ to SQL.

Pour créer le modèle de données

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, cliquez sur Ajouter, puis sur Nouvel élément.

    La boîte de dialogue Ajouter un nouvel élément s'affiche.

  2. Sous Modèles installés, sélectionnez Données.

  3. Dans la liste des modèles, sélectionnez ADO.NET Entity Data Model.

  4. Nommez le modèle de base de données AdventureWorksLT.edmx, puis cliquez sur Ajouter.

    L'Assistant EDM s'affiche.

  5. Sur l'écran Choisir un contenu de modèle, sélectionnez Générer à partir d'une base de données.

    L'illustration suivante montre la boîte de dialogue Choisir le contenu du modèle.

    Client de service de domaine ASP.NET : Choisir le contenu du modèle

  6. Cliquez sur Suivant.

  7. Sur l'écran Choisir votre connexion de données, sous Quelle connexion de données votre application doit-elle utiliser pour établir une connexion à la base de données ?, sélectionnez AdventureWorksLT_Data.mdf dans la liste déroulante.

  8. Assurez-vous que la case à cocher Enregistrer les paramètres de connexion de l'entité dans Web.config en tant que : est activée. Vous pouvez laisser le nom de chaîne de connexion par défaut.

    L'illustration suivante montre la boîte de dialogue Choisir votre connexion de données.

    Client de service de domaine ASP.NET : Choisir une connexion aux données

  9. Cliquez sur Suivant.

    L'Assistant affiche une page vous permettant de spécifier les objets de base de données à inclure dans votre modèle.

  10. Sur l'écran Choisir vos objets de base de données, sélectionnez le nœud Tables pour sélectionner toutes les tables de la base de données.

    L'illustration suivante montre la boîte de dialogue Choisir vos objets de base de données.

    Client de service de domaine ASP.NET : Choisir vos objets de base de données

  11. Assurez-vous que la case à cocher Inclure les colonnes clés étrangères dans le modèle est activée. Vous pouvez laisser l'espace de noms du modèle par défaut.

  12. Cliquez sur Terminer.

    ADO.NET Entity Data Model Designer s'affiche. Vous avez créé le modèle de données qui représente la base de données AdventureWorksLT.

  13. Fermez le concepteur.

  14. Générez l'application.

    La génération rend la classe de contexte AdventureWorksLT_DataEntities disponible au service de domaine dans la procédure suivante.

Utilisation du service de domaine

Cette procédure décrit les tâches que vous devez effectuer pour utiliser le service de domaine dans une application ASP.NET. Notamment :

  • Ajout d'une classe DomainService au projet. Cela crée la classe qui permet à votre application d'effectuer des opérations de base de données CRUD et surtout, cela vous permet d'inclure votre logique métier. Cette classe opère sur le serveur ou la couche intermédiaire.

  • Création de la logique métier. Vous incluez votre code (logique métier) dans la classe DomainService.

  • Déclaration du contrôle DomainDataSource. Cela doit être effectué dans le balisage d'une page afin que l'utilisateur puisse interagir avec la base de données. Ce contrôle opère sur le client ou la couche de présentation.

La procédure suivante indique comment ajouter le service de données du domaine au projet.

Pour ajouter une classe DomainService au projet

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, cliquez sur Ajouter, puis sur Nouvel élément.

  2. Sous Modèles installés, sélectionnez Web.

  3. Dans la liste de modèles, sélectionnez Classe DomainService.

  4. Nommez le fichier AdventureWorksDomainService.cs ou AdventureWorksDomainService.vb, puis cliquez sur Ajouter.

    La boîte de dialogue Ajouter une nouvelle classe de service de domaine s'affiche. La zone Nom de la classe de service de domaine : contient le nom que vous avez spécifié.

  5. Activez la case à cocher Activer l'accès client.

  6. Dans la liste déroulante Classes DataContext/ObjectContext disponibles :, sélectionnez AdventureWorksLT_DataEntities (Entity Framework). Si la liste déroulante est vide, vous n'avez pas généré l'application. Quittez la boîte de dialogue Ajouter une nouvelle classe de service de domaine, générez l'application et répétez les étapes précédentes. 

  7. Dans la liste Entités, sélectionnez la table Product.

  8. Pour la table Product, activez la case à cocher Activer la modification.

  9. Activez la case à cocher Générer des classes associées pour les métadonnées.

    L'illustration suivante montre la boîte de dialogue Ajouter une nouvelle classe de service de domaine.

    Client de service de domaine ASP.NET : Ajouter une nouvelle classe de service de domaine

  10. Cliquez sur OK.

    La classe AdventureWorksDomainService et le fichier de métadonnées associé sont créés. La classe contient les méthodes pour autoriser les opérations de base de données CRUD. Vous pouvez modifier à la fois la classe et les fichiers de métadonnées pour inclure votre logique métier. La procédure suivante montre un exemple simple. Notez que les références de projet ont été mises à jour pour contenir les assemblys requis et que le fichier Web.config a été mis à jour pour contenir tous les éléments de configuration exigés.

  11. Dans le menu Fichier, cliquez sur Enregistrer tout.

La procédure suivante indique comment personnaliser la classe AdventureWorksDomainService et le fichier de métadonnées associé pour inclure votre logique métier. La personnalisation est très simple, mais vous donne une idée des modifications que vous pouvez apporter.

Pour créer la logique métier

  1. Dans l'Explorateur de solutions, ouvrez le fichier AdventureWorksDomainService.cs ou AdventureWorksDomainService.vb.

  2. Modifiez la méthode UpdateProduct pour inclure une logique de validation du champ ListPrice, comme indiqué dans le code suivant. Mettez également à jour le champ ModifiedDate à l'aide de la date actuelle.

    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
    

    Quand la validation échoue, une exception est déclenchée et un message d'erreur est envoyé à la page qui doit s'afficher pour l'utilisateur.

  3. Modifiez la méthode GetProducts afin de définir la logique de classement nécessaire pour que l'Entity Framework fonctionne correctement, comme indiqué dans le code suivant.

    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. Enregistrez et fermez le fichier.

  5. Dans l'Explorateur de solutions, ouvrez le fichier AdventureWorksDomainService.metadata.cs ou AdventureWorksDomainService.metadata.vb.

  6. Ajoutez l'attribut Required à l'entité de champ de données Color, comme indiqué dans le code suivant.

    Avec cet attribut, vous forcez le champ de données à ne pas être vide comme autorisé par la base de données. Si l'utilisateur entre une chaîne vide, une erreur est émise.

    [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. Enregistrez et fermez le fichier de métadonnées.

  8. Générez l'application.

La procédure suivante indique comment déclarer le contrôle DomainDataSource dans le balisage d'une page afin que l'utilisateur puisse interagir avec la base de données.

Pour déclarer le contrôle DomainDataSource dans une page

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, cliquez sur Ajouter, puis sur Nouvel élément.

  2. Sous Modèles installés, cliquez sur Web.

  3. Dans la liste de modèles, sélectionnez Web Form.

  4. Nommez le fichier Default.aspx, puis cliquez sur Ajouter.

  5. Ouvrez Default.aspx en mode Design.

  6. À partir du groupe Général ou Données de la Boîte à outils, ajoutez un contrôle DomainDataSource à la page.

    Le DomainDataSource apparaît avec le menu Tâches DomainDataSource ouvert.

    Si le contrôle n'apparaît pas, cliquez sur le menu Outils, puis sur Choisir des éléments de boîte à outils. Dans la boîte de dialogue Choisir des éléments de boîte à outils, cliquez sur l'onglet .NET Framework Components, activez la case à cocher DomainDataSource, puis cliquez sur OK.

  7. Dans le menu Tâches DomainDataSource, cliquez sur Configurer la source de données.

    L'Assistant Configurer la source de données s'affiche.

  8. Sur l'écran Choisir un service de domaine, dans la liste Type de service de domaine :, sélectionnez la classe que vous avez créée UsingDomainService.AdventureWorksDomainService.

    L'illustration suivante montre l'écran Choisir un service de domaine.

    Client de service de domaine ASP.NET : Choisir un service de domaine

  9. Cliquez sur Suivant.

  10. Sur l'écran Configurer l'accès aux données, sélectionnez la méthode IQueryable<Product> GetProducts().

  11. Sélectionnez les cases à cocher Activer les insertions, Activer les mises à jour et Activer les suppressions.

    L'illustration suivante montre l'écran Configurer l'accès aux données.

    Client de service de domaine ASP.NET : Choisir un accès au domaine

  12. Cliquez sur Terminer.

  13. Dans la Boîte à outils, sous l'onglet Données, ajoutez un contrôle GridView à la page.

    Le contrôle GridView apparaît avec le menu Tâches GridView ouvert.

  14. Dans le menu Tâches GridView, dans la liste Choisir la source de données, sélectionnez DomainDataSource1.

    C'est l'ID du contrôle DomainDataSource que vous avez créé lors des étapes précédentes.

  15. Dans le menu Tâches GridView, cliquez sur Modifier les colonnes.

    La boîte de dialogue Champs s'affiche.

  16. Désactivez la case à cocher Générer automatiquement les champs.

  17. Dans le volet Champs sélectionnés : supprimez tous les champs, sauf Name, Color, ListPrice et ModifiedDate.

  18. Cliquez sur OK.

  19. Dans le menu Tâches GridView, vous pouvez également activer la pagination, le tri et la sélection en activant les cases à cocher correspondantes.

  20. Enregistrez le fichier et passez en mode Source.

  21. Sélectionnez le contrôle GridView.

  22. Dans la fenêtre Propriétés, affectez à la propriété DataKeyNames la liste suivante, séparée par des virgules, de toutes les colonnes qui ne sont pas affichées : ProductID, ProductNumber, StandardCost, Size, Weight, ProductCategoryID, ProductModelID, SellStartDate, SellEndDate, DiscontinuedDate, ThumbNailPhotoFileName, rowguid.

    Cela est exigé par le contrôle DomainDataSource pour effectuer les opérations CRUD.

  23. Attribuez à la propriété AutoGenerateEditButton la valeur True pour permettre l'annotation et la suppression de lignes de table.

  24. En mode Source, remplacez l'élément Columns par la balise suivante.

    À l'aide de modèles personnalisés, cette balise active la validation des valeurs des champs de données Color et ListPrice avant qu'elles soient envoyées au serveur pour publication. Elle crée également un contrôle LinkButton de suppression qui demande l'autorisation à l'utilisateur avant de supprimer une ligne.

      <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. Avant le contrôle GridView, ajoutez la balise suivante pour activer l'affichage des erreurs de validation :

    <asp:ValidationSummary ID="ValidationSummary1"  />
    <cc1:DomainValidator  ControlToValidate="GridView1"/>
    
  26. Enregistrez le fichier Default.aspx.

  27. Générez l'application.

Test du service de domaine

Cette procédure indique comment tester les fonctionnalités du service de domaine par le biais du contrôle GridView. Cette procédure effectue les vérifications suivantes :

  • L'interaction avec la base de données, via la logique métier personnalisée, fonctionne comme prévu.

  • ASP.NET effectue les modifications qui ont été apportées par l'utilisateur aux champs de la base de données.

  • ASP.NET affiche les messages d'erreur générés par la logique personnalisée.

Test du service de domaine

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur la page Default.aspx, puis sélectionnez Afficher dans le navigateur.

    Le navigateur affiche une page qui montre la table Product.

  2. Sur n'importe quelle ligne, cliquez sur Modifier et modifiez la valeur de la colonne ListPrice en entrant une valeur inférieure à 5.

  3. Sur la même ligne, cliquez sur Mettre à jour.

    Une erreur personnalisée s'affiche indiquant que le champ doit être supérieur ou égal à 5.

  4. Sur la même ligne, entrez une valeur supérieure à 5 pour la colonne ListPrice.

  5. Sur la même ligne, cliquez sur Mettre à jour.

    ASP.NET met à jour les champs de données ListPrice et ModifiedDate dans la base de données.

  6. Sur n'importe quelle ligne, cliquez sur Modifier et modifiez la valeur de la colonne Color en entrant une chaîne vide.

  7. Sur la même ligne, cliquez sur Mettre à jour.

    ASP.NET affiche une erreur de validation personnalisée.

  8. Sur la même ligne, entrez une valeur autre qu'une chaîne vide pour la colonne Color.

  9. Sur la même ligne, cliquez sur Mettre à jour.

    ASP.NET met à jour les champs de données Color et ModifiedDate dans la base de données.

Voir aussi

Tâches

Procédure : Ajouter une logique métier au service de domaine

Concepts

Création de solutions de Services RIA