Créer une association entre des entitésCreate an association between entities

Vous pouvez définir des relations entre des entités dans votre modèle de connectivité de données métiers (BDC) en créant des associations.You can define relationships between entities in your Business Data Connectivity (BDC) model by creating associations. Visual Studio génère des méthodes qui fournissent des consommateurs du modèle avec des informations sur chaque association.Visual Studio generates methods that provide consumers of the model with information about each association. Ces méthodes peuvent être consommées par les composants WebPart SharePoint, des listes ou des applications personnalisées pour afficher les relations de données dans une interface utilisateur (IU).These methods can be consumed by SharePoint web parts, lists, or custom applications to display data relationships in a user interface (UI).

Créer une associationCreate an association

En choisissant de créer une association le Association contrôle dans Visual Studio boîte à outils, en choisissant la première entité (appelée l’entité source), puis en choisissant la deuxième entité (appelée la entité de destination).Create an association by choosing the Association control in the Visual Studio Toolbox, choosing the first entity (called the source entity), and then choosing the second entity (called the destination entity). Vous pouvez définir les détails de l’association dans le Éditeur d’associations.You can define the details of the association in the Association Editor. Pour plus d’informations, consultez Comment : créer une Association entre des entités.For more information, see How to: Create an Association between Entities.

Méthodes d’associationAssociation methods

Applications telles que les composants WebPart SharePoint business données consomment des associations en appelant des méthodes dans la classe de service d’une entité.Applications such as SharePoint business data web parts consume associations by calling methods in the service class of an entity. Vous pouvez ajouter des méthodes à la classe de service d’une entité en les sélectionnant dans le Éditeur d’associations.You can add methods to the service class of an entity by selecting them in the Association Editor.

Par défaut, le Éditeur d’associations ajoute une méthode d’Association Navigation pour les entités source et de destination.By default, the Association Editor adds an Association Navigation method to the source and destination entities. Dans l’entité source, une méthode de Navigation de l’Association permet aux consommateurs de récupérer une liste d’entités de destination.An Association Navigation method in the source entity enables consumers to retrieve a list of destination entities. Dans l’entité de destination, une méthode de Navigation de l’Association permet aux consommateurs de récupérer l’entité source qui est lié à une entité de destination.An Association Navigation method in the destination entity enables consumers to retrieve the source entity that relates to a destination entity.

Vous devez ajouter le code pour chacune de ces méthodes pour retourner les informations appropriées.You must add the code to each of these methods to return the appropriate information. Vous pouvez également ajouter d’autres types de méthodes pour prendre en charge des scénarios plus avancés.You can also add other types of methods to support more advanced scenarios. Pour plus d’informations sur chacune de ces méthodes, consultez opérations prises en charge.For more information about each of these methods, see Supported Operations.

Types d’associationsTypes of associations

Vous pouvez créer deux types d’associations dans le concepteur BDC : des associations basé sur des clés étrangères et les associations sans clé étrangère.You can create two types of associations in the BDC designer: foreign key-based associations and foreign keyless associations.

Association de clé étrangèreForeign key-based association

Vous pouvez créer une association de clé étrangère en liant un identificateur de l’entité source pour les descripteurs de type définis dans l’entité de destination.You can create a foreign key-based association by relating an identifier in the source entity to type descriptors defined in the destination entity. Cette relation permet aux consommateurs du modèle de fournir une interface utilisateur améliorée pour les utilisateurs.This relationship enables consumers of the model to provide an enhanced UI for their users. Par exemple, un formulaire dans Outlook qui permet à un utilisateur de créer une commande 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.For example, a form in Outlook that enables a user to create a sales order that can display customers in a drop-down list; or a list of sales orders in SharePoint that enables users to open a profile page for a customer.

Pour créer une association de clé étrangère, concernent les identificateurs et descripteurs de type qui partagent le même nom et type.To create a foreign key-based association, relate identifiers and type descriptors that share the same name and type. Par exemple, vous pouvez créer une association de clé étrangère entre une Contact entité et un SalesOrder entité.For example, you might create a foreign key-based association between a Contact entity and a SalesOrder entity. Le SalesOrder renvoyait un ContactID descripteur de type dans le cadre du paramètre de retour des méthodes de recherche ou de recherche spécifique.The SalesOrder entity returns a ContactID type descriptor as part of the return parameter of Finder or Specific Finder methods. Les descripteurs de type s’affichent dans le Éditeur d’associations.Both type descriptors appear in the Association Editor. Pour créer une relation de clé étrangère entre les Contact entité et SalesOrder entité, choisissez le ContactID identificateur en regard de chacun de ces champs.To create a foreign key-based relationship between the Contact entity and SalesOrder entity, choose the ContactID identifier next to each of these fields.

Ajoutez le code à la méthode du navigateur d’associations de l’entité source qui retourne une collection d’entités de destination.Add code to the Association Navigator method of the source entity that returns a collection of destination entities. L’exemple suivant retourne les commandes client pour un contact.The following example returns the sales orders for a 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;
}
Public Shared Function ContactToSalesOrder(ByVal contactID As Integer) As IEnumerable(Of SalesOrderHeader)
    Const ServerName As String = "MySQLServerName"
    Dim dataContext As AdventureWorksDataContext = _
        New AdventureWorksDataContext("Data Source=" & ServerName & _
            ";Initial Catalog=AdventureWorks;Integrated Security=True")

    Dim orderList As IEnumerable(Of SalesOrderHeader) = _
        From orders In dataContext.SalesOrderHeaders _
        Where orders.ContactID = contactID _
              Select orders
    Return orderList

End Function

Ajoutez le code à la méthode du navigateur d’associations de l’entité de destination qui retourne une entité source.Add code to the Association Navigator method of the destination entity that returns a source entity. L’exemple suivant retourne le contact qui est associé à la commande client.The following example returns the contact that is related to the sales order.

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;

}
Public Shared Function SalesOrderToContact(ByVal salesOrderID As Integer) As IEnumerable(Of Contact)

    Const ServerName As String = "MySQLServerName"
    Dim dataContext As AdventureWorksDataContext = _
        New AdventureWorksDataContext("Data Source=" & ServerName & _
            ";Initial Catalog=AdventureWorks;Integrated Security=True")

    Dim TempContactID As Integer = _
        (From orders In dataContext.SalesOrderHeaders _
        Where orders.SalesOrderID = salesOrderID _
        Select orders.ContactID).[Single]()

    Dim contactList As IEnumerable(Of Contact) = _
        From contacts In dataContext.Contacts _
        Where contacts.ContactID = TempContactID _
        Select contacts
    Return contactList

End Function

Association sans clé étrangèreForeign keyless association

Vous pouvez créer une association sans mappage des identificateurs pour les descripteurs de type de champ.You can create an association without mapping identifiers to field type descriptors. Créez ce type d’association lorsque l’entité source n’a pas de relation directe avec l’entité de destination.Create this kind of association when the source entity does not have a direct relationship with the destination entity. Par exemple, un SalesOrderDetail table n’a pas une clé étrangère qui mappe à une clé primaire dans une Contact table.For example, a SalesOrderDetail table does not have a foreign key that maps to a primary key in a Contact table.

Si vous souhaitez afficher des informations dans le SalesOrderDetail table qui est lié à un Contact, vous pouvez créer une association sans clé étrangère entre les Contact entité et SalesOrderDetail entité.If you want to display information in the SalesOrderDetail table that relates to a Contact, you can create a foreign keyless association between the Contact entity and SalesOrderDetail entity.

Dans la méthode de Navigation de l’Association de la Contact entité, retournée la SalesOrderDetail entités en joignant des tables ou en appelant une procédure stockée.In the Association Navigation method of the Contact entity, return the SalesOrderDetail entities by joining tables, or by calling a stored procedure.

L’exemple suivant renvoie des informations sur toutes les commandes client en joignant les tables.The following example returns details of all sales orders by joining 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;
}
Public Shared Function ContactToSalesOrderDetail(ByVal contactID As Integer) As IEnumerable(Of SalesOrderDetail)
    Const ServerName As String = "MySQLServerName"
    Dim dataContext As AdventureWorksDataContext = _
        New AdventureWorksDataContext("Data Source=" & ServerName & _
            ";Initial Catalog=AdventureWorks;Integrated Security=True")

    Dim orderList As IEnumerable(Of SalesOrderDetail) = _
        From orders In dataContext.SalesOrderHeaders _
        Join orderDetails In dataContext.SalesOrderDetails On _
            orders.SalesOrderID Equals orderDetails.SalesOrderID _
        Where orders.ContactID = contactID _
        Select orderDetails
    Return orderList

End Function

Dans la méthode de Navigation de l’Association de la SalesOrderDetail entité, retourner le Contact.In the Association Navigation method of the SalesOrderDetail entity, return the related Contact. Cela est illustré par l'exemple suivant.The following example demonstrates this.

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;
}
Public Shared Function SalesOrderDetailToContact(ByVal salesOrderID As Integer, ByVal salesOrderDetailID As Integer) As IEnumerable(Of Contact)
    Const ServerName As String = "MySQLServerName"
    Dim dataContext As AdventureWorksDataContext = _
        New AdventureWorksDataContext("Data Source=" & ServerName & _
            ";Initial Catalog=AdventureWorks;Integrated Security=True")

    Dim TempContactID As Integer = _
        (From orders In dataContext.SalesOrderHeaders _
        Where orders.SalesOrderID = salesOrderID _
        Select orders.ContactID).[Single]()

    Dim contactList As IEnumerable(Of Contact) = _
        From contacts In dataContext.Contacts _
        Where contacts.ContactID = TempContactID _
        Select contacts
    Return contactList

End Function

Voir aussiSee also

Conception d’un modèle de connectivité de données métiers Designing a Business Data Connectivity Model
Comment : créer une Association entre des entitésHow to: Create an Association between Entities