Udostępnij za pośrednictwem


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