Partager via


Associations entre entités

Vous pouvez définir des relations entre des entités dans votre modèle Business Data Connectivity (BDC) en créant des associations. Visual Studio génère des méthodes qui fournissent aux consommateurs du modèle des informations sur chaque association. Ces méthodes peuvent être consommées par des composants WebPart SharePoint, des listes ou des applications personnalisées pour afficher des relations de données dans une interface utilisateur.

Créer une association

Créez une association en choisissant le contrôle Association dans la boîte à outils Visual Studio, en choisissant la première entité (appelée entité source), puis en choisissant la deuxième entité (appelée entité de destination). Vous pouvez définir les détails de l’association dans l’Éditeur d’association. Pour plus d’informations, consultez Guide pratique pour créer une association entre des entités.

Méthodes d’association

Les applications telles que les composants WebPart de données professionnelles de SharePoint utilisent les associations en appelant des méthodes dans la classe de service d’une entité. Vous pouvez ajouter des méthodes à la classe de service d’une entité en les sélectionnant dans l’Éditeur d’association.

Par défaut, l’Éditeur d’association ajoute une méthode de navigation d’association aux entités source et de destination. Une méthode de navigation d’association dans l’entité source permet aux consommateurs de récupérer une liste d’entités de destination. Une méthode de navigation d’association dans l’entité de destination permet aux consommateurs de récupérer l’entité source qui se rapporte à une entité de destination.

Vous devez ajouter le code à chacune de ces méthodes pour retourner les informations appropriées. Vous pouvez également ajouter d’autres types de méthodes pour prendre en charge des scénarios plus avancés. Pour plus d’informations sur chacune de ces méthodes, consultez Opérations prises en charge.

Types d’associations

Vous pouvez créer deux types d’associations dans le concepteur BDC : les associations basées sur des clés externes et les associations sans clé externe.

Association basée sur des clés étrangères

Vous pouvez créer une association basée sur une clé étrangère en associant un identificateur dans l’entité source aux descripteurs de type définis dans l’entité de destination. Cette relation permet aux consommateurs du modèle de fournir une interface utilisateur améliorée pour leurs utilisateurs. Par exemple, un formulaire dans Outlook qui permet à un utilisateur de créer une commande commerciale qui peut afficher les clients dans une liste déroulante ; ou une liste de commandes commerciales dans SharePoint qui permet aux utilisateurs d’ouvrir une page de profil pour un client.

Pour créer une association basée sur une clé étrangère, associez des identificateurs et des descripteurs de type qui partagent le même nom et le même type. Par exemple, vous pouvez créer une association basée sur une clé étrangère entre une Contact entité et une SalesOrder entité. L’entité SalesOrder retourne un ContactID descripteur de type dans le cadre du paramètre de retour des méthodes Finder ou Specific Finder. Les deux descripteurs de type apparaissent dans l’Éditeur d’association. Pour créer une relation basée sur une clé étrangère entre l’entité Contact et l’entité SalesOrder, choisissez l’identificateur ContactID à côté de chacun de ces champs.

Ajoutez du code à la méthode Association Navigator de l’entité source qui retourne une collection d’entités de destination. L’exemple suivant renvoie les commandes de vente pour un contact.

public static IEnumerable<SalesOrderHeader> ContactToSalesOrder(int contactID)
{
    const string ServerName = "MySQLServerName";
    AdventureWorksDataContext dataContext = new AdventureWorksDataContext
          ("Data Source=" + ServerName + ";" +
           "Initial Catalog=AdventureWorks;Integrated Security=True");

    IEnumerable<SalesOrderHeader> orderList = 
        from orders in dataContext.SalesOrderHeaders
             where orders.ContactID == contactID
             select orders;
    return orderList;
}

Ajoutez du code à la méthode Association Navigator de l’entité de destination qui retourne une entité source. L’exemple suivant retourne le contact lié à la commande client.

public static IEnumerable<Contact> SalesOrderToContact(int salesOrderID)
{
    const string ServerName = "MySQLServerName";
    AdventureWorksDataContext dataContext = new AdventureWorksDataContext
          ("Data Source=" + ServerName + ";" +
           "Initial Catalog=AdventureWorks;Integrated Security=True");

    int TempContactID = (from orders in dataContext.SalesOrderHeaders
                     where orders.SalesOrderID == salesOrderID
                     select orders.ContactID).Single();

    IEnumerable<Contact> contactList = from contacts in dataContext.Contacts
                                     where contacts.ContactID == TempContactID
                                     select contacts;
    return contactList;

}

Association sans clé étrangère

Vous pouvez créer une association sans mapper les identificateurs aux descripteurs de type de champ. Créez ce type d’association lorsque l’entité source n’a pas de relation directe avec l’entité de destination. Par exemple, une SalesOrderDetail table n’a pas de clé étrangère qui est mappée à une clé primaire dans une Contact table.

Si vous souhaitez afficher des informations dans le tableau SalesOrderDetail qui se rapportent à un Contact, vous pouvez créer une association sans clé étrangère entre l'entité Contact et l'entité SalesOrderDetail.

Dans la méthode Navigation d’association de l’entité Contact, renvoyez les entités SalesOrderDetail en appelant une procédure stockée ou en joignant des tables.

L’exemple suivant retourne les détails de toutes les commandes de vente grâce à la jointure de tables.

public static IEnumerable<SalesOrderDetail> ContactToSalesOrderDetail(int contactID)
{
    const string ServerName = "MySQLServerName";
    AdventureWorksDataContext dataContext = new AdventureWorksDataContext
          ("Data Source=" + ServerName + ";" +
           "Initial Catalog=AdventureWorks;Integrated Security=True");

    IEnumerable<SalesOrderDetail> orderList =
        from orders in dataContext.SalesOrderHeaders
        join orderDetails in dataContext.SalesOrderDetails on
            orders.SalesOrderID equals orderDetails.SalesOrderID
        where orders.ContactID == contactID
        select orderDetails;
    return orderList;
}

Dans la méthode de navigation par association de l’entité SalesOrderDetail, retournez l'élément associé Contact. l’exemple ci-dessous illustre ce cas de figure.

public static IEnumerable<Contact> SalesOrderDetailToContact(int salesOrderID, int salesOrderDetailID)
{
    const string ServerName = "MySQLServerName";
    AdventureWorksDataContext dataContext = new AdventureWorksDataContext
          ("Data Source=" + ServerName + ";" +
           "Initial Catalog=AdventureWorks;Integrated Security=True");
        
    int TempContactID = (from orders in dataContext.SalesOrderHeaders
                         where orders.SalesOrderID == salesOrderID
                         select orders.ContactID).Single();

    IEnumerable<Contact> contactList = from contacts in dataContext.Contacts
                                       where contacts.ContactID == TempContactID
                                       select contacts;
    return contactList;
}