Sdílet prostřednictvím


Přidružení mezi entitami

Vztahy mezi entitami v modelu BDC (Business Data Připojení ivity) můžete definovat vytvořením přidružení. Visual Studio generuje metody, které uživatelům modelu poskytují informace o jednotlivých přidruženích. Tyto metody můžou využívat webové části, seznamy nebo vlastní aplikace SharePointu k zobrazení relací dat v uživatelském rozhraní.

Vytvoření přidružení

Vytvořte přidružení výběrem ovládacího prvku Association v sadě nástrojů sady Visual Studio, výběrem první entity (označované jako zdrojová entita) a následným výběrem druhé entity (označované jako cílová entita). Podrobnosti o přidružení můžete definovat v Editoru přidružení. Další informace naleznete v tématu Postupy: Vytvoření přidružení mezi entitami.

Metody přidružení

Aplikace, jako jsou webové části obchodních dat SharePointu, využívají přidružení voláním metod ve třídě služby entity. Metody můžete přidat do třídy služby entity tak, že je vyberete v Editoru přidružení.

Editor přidružení ve výchozím nastavení přidá metodu navigace přidružení do zdrojových a cílových entit. Metoda navigace přidružení ve zdrojové entitě umožňuje příjemcům načíst seznam cílových entit. Metoda navigace přidružení v cílové entitě umožňuje příjemcům načíst zdrojovou entitu, která souvisí s cílovou entitou.

Abyste mohli vrátit příslušné informace, musíte do každé z těchto metod přidat kód. Můžete také přidat další typy metod pro podporu pokročilejších scénářů. Další informace o každé z těchto metod naleznete v tématu Podporované operace.

Typy přidružení

V návrháři služby BDC můžete vytvořit dva typy přidružení: přidružení založená na cizích klíčích a přidružení bez cizích klíčů.

Přidružení založené na cizím klíči

Přidružení založené na cizím klíči můžete vytvořit tak, že ve zdrojové entitě propojíte identifikátor s popisovači typu definovanými v cílové entitě. Tento vztah umožňuje uživatelům modelu poskytovat uživatelům vylepšené uživatelské rozhraní. Například formulář v Outlooku, který uživateli umožňuje vytvořit prodejní objednávku, která může zobrazit zákazníky v rozevíracím seznamu; nebo seznam prodejních objednávek v SharePointu, který uživatelům umožňuje otevřít stránku profilu pro zákazníka.

Pokud chcete vytvořit přidružení založené na cizím klíči, spojte identifikátory a popisovače typu, které sdílejí stejný název a typ. Můžete například vytvořit přidružení založené na cizím klíči mezi entitou Contact a entitou SalesOrder . Entita SalesOrder vrátí ContactID popisovač typu jako součást návratového parametru Finderu nebo konkrétních vyhledávacích metod. Oba popisovače typu se zobrazí v Editoru přidružení. Pokud chcete vytvořit vztah založený na cizím klíči mezi entitou Contact a SalesOrder entitou, zvolte ContactID identifikátor vedle každého z těchto polí.

Přidejte kód do metody Association Navigator zdrojové entity, která vrací kolekci cílových entit. Následující příklad vrátí prodejní objednávky 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;
}

Přidejte kód do metody Association Navigator cílové entity, která vrací zdrojovou entitu. Následující příklad vrátí kontakt, který souvisí s prodejní objednávkou.

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;

}

Přidružení bez cizích klíčů

Přidružení můžete vytvořit bez identifikátorů mapování na popisovače typu pole. Tento druh přidružení vytvořte, pokud zdrojová entita nemá přímý vztah s cílovou entitou. Například SalesOrderDetail tabulka nemá cizí klíč, který se mapuje na primární klíč v Contact tabulce.

Pokud chcete zobrazit informace v SalesOrderDetail tabulce, která souvisí s danou entitouContact, můžete vytvořit přidružení cizího klíče mezi entitou a SalesOrderDetail entitouContact.

V metodě Contact Navigace přidružení entity, vrátit SalesOrderDetail entity spojením tabulek nebo voláním uložené procedury.

Následující příklad vrátí podrobnosti o všech prodejních objednávkách spojením tabulek.

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

V Asociační navigační metoda SalesOrderDetail entity, vrátit související Contact. Následující příklad ukazuje 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;
}