Udostępnij przez


Skojarzenia między jednostkami

Relacje między jednostkami można zdefiniować w modelu usługi łączności danych biznesowych (BDC), 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 asocjacyjne

Aplikacje, takie jak składniki Web Part programu SharePoint do danych biznesowych, używają skojarzeń, wywołując metody w klasie serwisowej 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 dla powiązań w jednostce źródłowej pozwala użytkownikom na pobranie listy jednostek docelowych. Metoda nawigacji asocjacji w jednostce docelowej pozwala konsumentom na pobieranie jednostki źródłowej, której dotyczy jednostka docelowa.

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ń: skojarzenia oparte na kluczach obcych i skojarzenia bez kluczy obcych.

Asocjacja oparta 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 kluczu obcym między jednostką Contact a jednostką SalesOrder, wybierz identyfikator ContactID 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 osoby kontaktowej.

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

Można utworzyć skojarzenie 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 tabela SalesOrderDetail nie ma klucza obcego, który odnosi się do klucza podstawowego w tabeli Contact.

Jeśli chcesz wyświetlić informacje w tabeli SalesOrderDetail, które są powiązane z Contact, możesz utworzyć skojarzenie bez klucza obcego między jednostką Contact a jednostką SalesOrderDetail.

W metodzie nawigacji powiązań encji Contact zwróć encje SalesOrderDetail przez łączenie tabel lub wywołanie procedury składowanej.

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 powiązań SalesOrderDetail encji zwróć powiązaną encję 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;
}