Condividi tramite


Associazioni tra entità

È possibile definire relazioni tra entità nel modello di business data Connessione ivity (BDC) creando associazioni. Visual Studio genera metodi che forniscono ai consumer del modello informazioni su ogni associazione. Questi metodi possono essere utilizzati da elenchi, applicazioni personalizzate o web part di SharePoint per visualizzare le relazioni tra i dati in un'interfaccia utente.

Creare un'associazione

Creare un'associazione scegliendo il controllo Associazione nella casella degli strumenti di Visual Studio, scegliendo la prima entità (denominata entità di origine) e quindi scegliendo la seconda entità (denominata entità di destinazione). È possibile definire i dettagli dell'associazione nell'Editor associazione. Per altre informazioni, vedere Procedura: Creare un'associazione tra entità.

Metodi di associazione

Le applicazioni come le web part di dati aziendali di SharePoint utilizzano associazioni chiamando metodi nella classe di servizio di un'entità. È possibile aggiungere metodi alla classe di servizio di un'entità selezionandoli nell'Editor associazione.

Per impostazione predefinita, l'Editor associazioni aggiunge un metodo di navigazione associazione alle entità di origine e di destinazione. Un metodo association navigation nell'entità di origine consente ai consumer di recuperare un elenco di entità di destinazione. Un metodo association navigation nell'entità di destinazione consente ai consumer di recuperare l'entità di origine correlata a un'entità di destinazione.

È necessario aggiungere il codice a ognuno di questi metodi per restituire le informazioni appropriate. È anche possibile aggiungere altri tipi di metodi per supportare scenari più avanzati. Per altre informazioni su ognuno di questi metodi, vedere Operazioni supportate.

Tipi di associazioni

È possibile creare due tipi di associazioni nella finestra di progettazione BDC: associazioni esterne basate su chiavi e associazioni senza chiave esterna.

Associazione basata su chiave esterna

È possibile creare un'associazione basata su chiave esterna correlando un identificatore nell'entità di origine ai descrittori di tipo definiti nell'entità di destinazione. Questa relazione consente ai consumer del modello di fornire un'interfaccia utente avanzata per gli utenti. Ad esempio, un modulo di Outlook che consente a un utente di creare un ordine di vendita in grado di visualizzare i clienti in un elenco a discesa; o un elenco di ordini di vendita in SharePoint che consente agli utenti di aprire una pagina del profilo per un cliente.

Per creare un'associazione basata su chiave esterna, correlare identificatori e descrittori di tipo che condividono lo stesso nome e tipo. Ad esempio, è possibile creare un'associazione basata su chiave esterna tra un'entità Contact e un'entità SalesOrder . L'entità SalesOrder restituisce un ContactID descrittore di tipo come parte del parametro restituito dei metodi Finder o Finder specifici. Entrambi i descrittori di tipo vengono visualizzati nell'Editor associazione. Per creare una relazione basata su chiave esterna tra l'entità e SalesOrder l'entitàContact, scegliere l'identificatore ContactID accanto a ognuno di questi campi.

Aggiungere codice al metodo Association Navigator dell'entità di origine che restituisce una raccolta di entità di destinazione. Nell'esempio seguente vengono restituiti gli ordini di vendita per un contatto.

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

Aggiungere codice al metodo Association Navigator dell'entità di destinazione che restituisce un'entità di origine. Nell'esempio seguente viene restituito il contatto correlato all'ordine di vendita.

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;

}

Associazione senza chiave esterna

È possibile creare un'associazione senza eseguire il mapping degli identificatori ai descrittori dei tipi di campo. Creare questo tipo di associazione quando l'entità di origine non ha una relazione diretta con l'entità di destinazione. Ad esempio, una SalesOrderDetail tabella non dispone di una chiave esterna che esegue il mapping a una chiave primaria in una Contact tabella.

Se si desidera visualizzare informazioni nella SalesOrderDetail tabella correlata a un Contactoggetto , è possibile creare un'associazione senza chiave esterna tra l'entità e SalesOrderDetail l'entitàContact.

Nel metodo Association Navigation dell'entità Contact restituire le SalesOrderDetail entità unendo le tabelle o chiamando una stored procedure.

Nell'esempio seguente vengono restituiti i dettagli di tutti gli ordini di vendita mediante l'unione di tabelle.

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

Nel metodo Association Navigation dell'entità SalesOrderDetail restituire l'oggetto correlato Contact. L'esempio seguente illustra questa operazione.

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