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