Associationer mellan entiteter

Du kan definiera relationer mellan entiteter i din BDC-modell (Business Data Connectivity) genom att skapa associationer. Visual Studio genererar metoder som ger användare av modellen information om varje association. Dessa metoder kan användas av SharePoint-webbdelar, listor eller anpassade program för att visa datarelationer i ett användargränssnitt (UI).

Skapa en association

Skapa en association genom att välja Association-kontrollen i Visual Studio Toolbox, välja den första entiteten (kallas källentiteten) och sedan välja den andra entiteten (kallas målentiteten). Du kan definiera information om associationen i associationsredigeraren. Mer information finns i Så här skapar du en association mellan entiteter.

Associationsmetoder

Program som SharePoint-webbdelar för affärsdata använder associationer genom att anropa metoder i tjänstklassen för en entitet. Du kan lägga till metoder i tjänstklassen för en entitet genom att välja dem i associationsredigeraren.

Som standard lägger associationsredigeraren till en associationsnavigeringsmetod till käll- och målentiteterna. Med en associationsnavigeringsmetod i källentiteten kan användarna hämta en lista över målentiteter. Med en associationsnavigeringsmetod i målentiteten kan användarna hämta källentiteten som relaterar till en målentitet.

Du måste lägga till koden i var och en av dessa metoder för att returnera lämplig information. Du kan också lägga till andra typer av metoder för att stödja mer avancerade scenarier. Mer information om var och en av dessa metoder finns i Åtgärder som stöds.

Typer av associationer

Du kan skapa två typer av associationer i BDC-designern: externa nyckelbaserade associationer och externa nyckellösa associationer.

Extern nyckelbaserad association

Du kan skapa en association baserad på främmande nyckel genom att koppla en identifierare i källentiteten till deskriptorer som definierats i målentiteten. Den här relationen gör det möjligt för användare av modellen att tillhandahålla ett förbättrat användargränssnitt för sina användare. Till exempel ett formulär i Outlook som gör det möjligt för en användare att skapa en försäljningsorder som kan visa kunder i en listruta. eller en lista över försäljningsorder i SharePoint som gör det möjligt för användare att öppna en profilsida för en kund.

För att skapa en främmande nyckelbaserad association relaterar du identifierare och typbeskrivningar som delar samma namn och typ. Du kan till exempel skapa en sekundär nyckelbaserad association mellan en entitet Contact och en entitet SalesOrder . Entiteten SalesOrder returnerar en ContactID typbeskrivning som en del av returparametern för Finder- eller Specific Finder-metoder. Båda typbeskrivningarna visas i associationredigeraren. För att skapa en främmande nyckel-baserad relation mellan entiteten Contact och entiteten SalesOrder, välj identifieraren ContactID bredvid vart och ett av dessa fält.

Lägg till kod i metoden Association Navigator för källentiteten som returnerar en samling målentiteter. I följande exempel returneras försäljningsorder för en kontakt.

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

Lägg till kod i metoden Association Navigator för målentiteten som returnerar en källentitet. I följande exempel returneras den kontakt som är relaterad till försäljningsordern.

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;

}

Extern nyckellös association

Du kan skapa en association utan att mappa identifierare till fälttypsbeskrivningar. Skapa den här typen av association när källentiteten inte har någon direkt relation till målentiteten. En SalesOrderDetail tabell har till exempel ingen extern nyckel som mappar till en primärnyckel i en Contact tabell.

Om du vill visa information i tabellen SalesOrderDetail som relaterar till en Contactkan du skapa en sekundär nyckellös association mellan entiteten Contact och SalesOrderDetail entiteten.

I metoden Association Navigation för Contact entiteten returnerar du entiteterna SalesOrderDetail genom att ansluta tabeller eller genom att anropa en lagrad procedur.

I följande exempel returneras information om alla försäljningsorder genom att koppla tabeller.

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

I Association Navigation-metoden för entiteten SalesOrderDetail returneras den relaterade Contact. I följande exempel visas detta.

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