Erstellen einer Assoziation zwischen Entitäten

Sie können im Business Data Connectivity (BDC)-Modell Beziehungen zwischen Entitäten definieren, indem Sie Zuordnungen erstellen. Visual Studio generiert Methoden, die Consumern des Modells zu jeder Zuordnung Informationen bereitstellen. Diese Methoden können von SharePoint-Webparts, Listen oder benutzerdefinierten Anwendungen verwendet werden, um Datenbeziehungen in einer Benutzeroberfläche anzuzeigen.

Erstellen einer Zuordnung

Erstellen Sie eine Zuordnung, indem Sie eine Zuordnung in der Toolbox von Visual Studio auswählen, auf die erste Entität klicken (als Quellentität bezeichnet) und dann auf die zweite Entität klicken (als Zielentität bezeichnet). Sie können die Details der Zuordnung im Zuordnungs-Editor definieren. Weitere Informationen finden Sie unter Gewusst wie: Erstellen einer Assoziation zwischen Entitäten.

Zuordnungsmethoden

Anwendungen wie SharePoint Geschäftsdaten-Webparts nutzen Zuordnungen, indem sie Methoden in der Dienstklasse einer Entität aufrufen. Sie können der Dienstklasse einer Entität Methoden hinzufügen, indem Sie sie im Zuordnungs-Editor auswählen.

Standardmäßig fügt der Zuordnungs-Editor den Quell- und Zielentitäten eine Zuordnungsnavigationsmethode hinzu. Eine Zuordnungsnavigationsmethode in der Quellentität ermöglicht es Consumern, eine Liste von Zielentitäten abzurufen. Eine Zuordnungsnavigationsmethode in der Zielentität ermöglicht es Consumern, die Quellentität abzurufen, die sich auf eine Zielentität bezieht.

Sie müssen jeder dieser Methoden Code hinzufügen, um die entsprechenden Informationen zurückzugeben. Sie können auch andere Typen von Methoden hinzufügen, um erweiterte Szenarios zu unterstützen. Weitere Informationen zu diesen Methoden finden Sie im Thema zu unterstützten Operationen (möglicherweise in englischer Sprache).

Typen von Zuordnungen

Sie können im BDC-Designer zwei Typen von Zuordnungen erstellen: auf Fremdschlüsseln basierte Zuordnungen und Zuordnungen ohne Fremdschlüssel.

Auf Fremdschlüsseln basierte Zuordnung

Sie können eine auf Fremdschlüsseln basierte Zuordnung erstellen, indem Sie in der Quellentität einen Bezeichner mit in der Zielentität definierten Typdeskriptoren verknüpfen. Diese Beziehung ermöglicht es Consumern des Modells, ihren Benutzern eine verbesserte Benutzeroberfläche bereitzustellen. Beispiele: Ein Formular in Outlook, das es einem Benutzer ermöglicht, einen Auftrag zu erstellen, in dem die Kunden in einer Dropdownliste angezeigt werden, oder eine Liste von Aufträgen in SharePoint, die es Benutzern ermöglicht, eine Profilseite für einen Kunden zu öffnen.

Um eine auf Fremdschlüsseln basierte Zuordnung zu erstellen, verknüpfen Sie Bezeichner und Typdeskriptoren, die denselben Namen und Typ aufweisen. Sie können z. B. eine auf Fremdschlüsseln basierte Zuordnung zwischen einer Contact-Entität und einer SalesOrder-Entität erstellen. Die SalesOrder-Entität gibt einen ContactID-Typdeskriptor als Teil des Rückgabeparameters von Finder- oder spezifischen Finder-Methoden zurück. Beide Typdeskriptoren werden im Zuordnungs-Editor angezeigt. Um eine auf Fremdschlüsseln basierte Beziehung zwischen der Contact-Entität und der SalesOrder-Entität zu erstellen, wählen Sie den ContactID-Bezeichner neben den jeweiligen Feldern aus.

Fügen Sie in der Zuordnungsnavigatormethode der Quellentität Code hinzu, mit dem eine Auflistung von Zielentitäten zurückgegeben wird. Im folgenden Beispiel werden die Aufträge für einen Kontakt zurückgegeben.

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
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;
}

Fügen Sie in der Zuordnungsnavigatormethode der Zielentität Code hinzu, mit dem eine verknüpfte Quellentität zurückgegeben wird. Im folgenden Beispiel wird der Kontakt zurückgegeben, der sich auf den Auftrag bezieht.

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
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;

}

Zuordnung ohne Fremdschlüssel

Sie können eine Zuordnung erstellen, ohne Feldtypdeskriptoren Bezeichner zuzuordnen. Erstellen Sie diese Art von Zuordnung, wenn die Quellentität keine direkte Beziehung mit der Zielentität aufweisen soll. Eine SalesOrderDetail-Tabelle verfügt z. B. nicht über einen Fremdschlüssel, der einem Primärschlüssel in einer Contact-Tabelle zugeordnet ist.

Wenn Sie Informationen in der Tabelle SalesOrderDetail anzeigen, die sich auf einen Contact beziehen, können Sie eine Zuordnung ohne Fremdschlüssel zwischen der Contact-Entität und der SalesOrderDetail-Entität erstellen.

Geben Sie in der Zuordnungsnavigationsmethode der Contact-Entität die SalesOrderDetail-Entitäten zurück, indem Sie Tabellen verknüpfen oder eine gespeicherte Prozedur aufrufen.

Im folgenden Beispiel werden Details aller Aufträge zurückgegeben, indem Tabellen verknüpft werden.

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
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;
}

Geben Sie in der Zuordnungsnavigationsmethode der SalesOrderDetail-Entität den verwandten Contact zurück. Das folgende Beispiel veranschaulicht dies.

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
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;
}

Siehe auch

Weitere Ressourcen

Entwerfen eines Business Data Connectivity-Modells

Gewusst wie: Erstellen einer Assoziation zwischen Entitäten