Создание ассоциации между сущностями
Чтобы определить отношения между сущностями в модели BDC, можно создать ассоциации.Visual Studio создает методы, предоставляющие потребителям модели сведения о каждой ассоциации.Эти методы могут быть использованы интернет SharePoint разбивают, списки или пользовательских приложений для отображения отношений данных в пользовательском интерфейсе (ui).
Создание ассоциации
Создание ассоциации, выбрав элемент управления Ассоциация в Visual Studio Панель элементов, выбор первая сущность (сущностью источника), а затем выбрать вторую сущность (сущностью назначения).В Редакторе ассоциаций можно определять подробности ассоциации.Дополнительные сведения см. в разделе Практическое руководство. Создание ассоциации между сущностями.
Методы связи
Приложения, как веб-части бизнес-данных SharePoint используют ассоциации, вызывая методы в классе службы сущности.Чтобы добавить методы в класс службы сущности, нужно выбрать их в Редакторе ассоциаций.
По умолчанию Редактор ассоциаций добавляет метод навигации ассоциаций в исходную и конечную сущности.Метод навигации ассоциаций в исходной сущности позволяет потребителям извлекать список конечных сущностей.Метод навигации ассоциаций в конечной сущности позволяет потребителям извлекать исходную сущность, которая соотносится с конечной сущностью.
Чтобы возвратить необходимую информацию, необходимо добавить код в каждый из этих методов.Кроме того, можно добавить другие типы методов, чтобы обеспечить поддержку более сложных сценариев.Дополнительные сведения о каждом из этих методов см. в разделе Supported Operations.
Типы ассоциаций
В конструкторе BDC можно создать два типа ассоциаций: ассоциации на основе внешнего ключа и ассоциации без внешнего ключа.
Ассоциация на основе внешнего ключа
Чтобы создать ассоциацию на основе внешнего ключа, можно связать идентификатор в исходной сущности с дескрипторами типа, определенными в конечной сущности.Это отношение позволяет потребителям модели предоставлять своим пользователям интерфейс с расширенными возможностями.Например, форма в приложении Outlook, позволяющая пользователю создавать заказ, в котором клиенты отображаются в раскрывающемся списке; либо список заказов в SharePoint, позволяющий пользователям открывать страницу профиля клиента.
Чтобы создать ассоциацию на основе внешнего ключа, необходимо связать идентификаторы и дескрипторы типа, имеющие одни и те же имена и типы.Например, можно создать ассоциацию на основе внешнего ключа между сущностями Contact и SalesOrder.Сущность SalesOrder возвращает дескриптор типа ContactID как часть возвращаемого параметра метода поиска и конкретного метода поиска.Оба дескриптора типа отображаются в Редакторе ассоциаций.Для создания чужое ключ-, основанное Contact связь между сущностью и сущностью SalesOrder выберите идентификатор ContactID рядом с каждым из этих полей.
Добавьте код, возвращающий коллекцию конечных сущностей, в метод навигации ассоциаций исходной сущности.В следующем примере показано возвращение заказа для контакта.
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;
}
Добавьте код, возвращающий исходную сущность, в метод навигации ассоциаций конечной сущности.В следующем примере показано возвращение контакта, связанного с заказом.
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;
}
Ассоциация без внешнего ключа
Можно создать ассоциацию, не сопоставляя идентификаторы дескрипторам типа поля.Этот вид ассоциации создается, если исходная сущность не связана прямыми отношениями с конечной сущностью.Например, таблица SalesOrderDetail не имеет внешнего ключа, сопоставляемого первичному ключу в таблице Contact.
Если требуется отобразить сведения в таблице SalesOrderDetail, связанные с таблицей Contact, можно создать ассоциацию без внешнего ключа между сущностями Contact и SalesOrderDetail.
В методе навигации ассоциаций сущности Contact необходимо возвратить сущности SalesOrderDetail, объединив таблицы или вызвав хранимую процедуру.
В следующем примере показано возвращение сведений обо всех заказах путем объединения таблиц.
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;
}
В методе навигации ассоциаций сущности SalesOrderDetail необходимо возвратить связанную сущность Contact.Это показано в приведенном ниже примере.
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;
}
См. также
Задачи
Практическое руководство. Создание ассоциации между сущностями