Partager via


Associations entre entités

Vous pouvez définir des relations entre des entités dans votre modèle BDC (Business Data Connectivity) 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 utilisées par des parties WebPart, des listes ou des applications personnalisées SharePoint pour afficher les relations de données dans une interface utilisateur (IU).

Créer une association

Créez une association en choisissant le contrôle Association dans Visual Studio Boîte à outils, 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 parties WebPart de données métier SharePoint consomment des 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 contrôles serveur consommateur 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 contrôles serveur consommateur de récupérer l’entité source liée à 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 étrangères et les associations sans clé étrangères.

Association basée sur une clé étrangère

Vous pouvez créer une association basée sur une clé étrangère en liant un identificateur dans l’entité source à des descripteurs de type définis dans l’entité de destination. Cette relation permet aux contrôles serveur consommateur du modèle de fournir une IU améliorée à leurs utilisateurs. Par exemple, un formulaire dans Outlook qui permet à un utilisateur de créer une commande client qui peut afficher les clients dans une liste déroulante ; ou une liste de commandes client 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 les identificateurs et les 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 entité Contact et une entité SalesOrder. L’entité SalesOrder retourne un ContactID descripteur de type dans le cadre du paramètre de retour des méthodes Finder ou Finder spécifique. 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 en regard de chacun de ces champs.

Ajoutez du code à la méthode Navigateur d’association de l’entité source qui retourne une collection d’entités de destination. L’exemple suivant retourne les commandes client 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 Navigateur d’association 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 des 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 table SalesOrderDetail n’a pas de clé étrangère mappée à une clé primaire dans une table Contact.

Si vous souhaitez afficher dans la table SalesOrderDetail des informations relatives à 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, retournez les entités SalesOrderDetail en joignant des tables ou en appelant une procédure stockée.

L’exemple suivant retourne les détails de toutes les commandes client en joignant des 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 Navigation d’association de l’entité SalesOrderDetail, retournez le Contact associé. 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;
}