Skojarzenia między jednostkami
Relacje między jednostkami można zdefiniować w modelu Połączenie ivity (BDC) danych biznesowych, tworząc skojarzenia. Program Visual Studio generuje metody, które zapewniają konsumentom modelu informacje o każdym skojarzeniu. Te metody mogą być używane przez składniki Web Part programu SharePoint, listy lub aplikacje niestandardowe do wyświetlania relacji danych w interfejsie użytkownika.
Tworzenie skojarzenia
Utwórz skojarzenie, wybierając kontrolkę Skojarzenie w przyborniku programu Visual Studio, wybierając pierwszą jednostkę (nazywaną jednostką źródłową), a następnie wybierając drugą jednostkę (nazywaną jednostką docelową). Szczegóły skojarzenia można zdefiniować w Edytorze skojarzeń. Aby uzyskać więcej informacji, zobacz Jak utworzyć skojarzenie między jednostkami.
Metody skojarzenia
Aplikacje, takie jak składniki Web Part danych biznesowych programu SharePoint, używają skojarzeń przez wywoływanie metod w klasie usługi jednostki. Metody można dodać do klasy usługi jednostki, wybierając je w Edytorze skojarzeń.
Domyślnie Edytor skojarzeń dodaje metodę nawigacji skojarzenia do jednostek źródłowych i docelowych. Metoda nawigacji skojarzenia w jednostce źródłowej umożliwia konsumentom pobieranie listy jednostek docelowych. Metoda nawigacji skojarzenia w jednostce docelowej umożliwia konsumentom pobieranie jednostki źródłowej powiązanej z jednostką docelową.
Aby zwrócić odpowiednie informacje, należy dodać kod do każdej z tych metod. Możesz również dodać inne typy metod, aby obsługiwać bardziej zaawansowane scenariusze. Aby uzyskać więcej informacji na temat każdej z tych metod, zobacz Obsługiwane operacje.
Typy skojarzeń
W projektancie usługi BDC można utworzyć dwa typy skojarzeń: obce skojarzenia oparte na kluczach i obce skojarzenia bez klucza.
Skojarzenie oparte na kluczach obcych
Można utworzyć skojarzenie oparte na kluczach obcych przez powiązanie identyfikatora w jednostce źródłowej z deskryptorami typów zdefiniowanymi w jednostce docelowej. Ta relacja umożliwia konsumentom modelu udostępnienie ulepszonego interfejsu użytkownika użytkownikom. Na przykład formularz w programie Outlook, który umożliwia użytkownikowi utworzenie zamówienia sprzedaży, które może wyświetlać klientów na liście rozwijanej; lub lista zamówień sprzedaży w programie SharePoint, która umożliwia użytkownikom otwieranie strony profilu dla klienta.
Aby utworzyć skojarzenie oparte na kluczach obcych, należy powiązać identyfikatory i deskryptory typów, które mają taką samą nazwę i typ. Można na przykład utworzyć skojarzenie oparte na kluczach obcych między jednostką Contact
a jednostką SalesOrder
. Jednostka SalesOrder
zwraca ContactID
deskryptor typu jako część zwracanego parametru metody wyszukiwania lub określonej metody wyszukiwania. Oba deskryptory typów są wyświetlane w Edytorze skojarzeń. Aby utworzyć relację opartą na kluczach obcych między jednostką Contact
a SalesOrder
jednostką, wybierz ContactID
identyfikator obok każdego z tych pól.
Dodaj kod do metody Nawigator skojarzeń jednostki źródłowej, która zwraca kolekcję jednostek docelowych. Poniższy przykład zwraca zamówienia sprzedaży dla kontaktu.
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;
}
Dodaj kod do metody Nawigator skojarzeń jednostki docelowej, która zwraca jednostkę źródłową. Poniższy przykład zwraca kontakt związany z zamówieniem sprzedaży.
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;
}
Skojarzenie bez klucza obcego
Skojarzenie można utworzyć bez mapowania identyfikatorów na deskryptory typów pól. Utwórz tego rodzaju skojarzenie, gdy jednostka źródłowa nie ma bezpośredniej relacji z jednostką docelową. Na przykład SalesOrderDetail
tabela nie ma klucza obcego mapowania na klucz podstawowy w Contact
tabeli.
Jeśli chcesz wyświetlić informacje w SalesOrderDetail
tabeli powiązanej z elementem , możesz utworzyć obce skojarzenie bez klucza między Contact
jednostką Contact
a SalesOrderDetail
jednostką.
W metodzie Nawigacji skojarzenia Contact
jednostki zwróć SalesOrderDetail
jednostki przez dołączenie tabel lub wywołując procedurę składowaną.
Poniższy przykład zwraca szczegóły wszystkich zamówień sprzedaży przez łączenie tabel.
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;
}
W metodzie Nawigacji skojarzenia SalesOrderDetail
jednostki zwróć powiązany element Contact
. W poniższym przykładzie pokazano to.
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;
}