Compartilhar via


Associações entre entidades

Você pode definir relações entre entidades em seu modelo de BDC (Conectividade de Dados Corporativos) criando associações. O Visual Studio gera métodos que fornecem aos consumidores do modelo informações sobre cada associação. Esses métodos podem ser consumidos por web parts, listas ou aplicativos personalizados do SharePoint para exibir relações de dados em uma interface do usuário (IU).

Criar uma associação

Crie uma associação escolhendo o controle Associação na Caixa de Ferramentas do Visual Studio, escolhendo a primeira entidade (chamada de entidade de origem) e escolhendo a segunda entidade (chamada de entidade de destino). Você pode definir os detalhes da associação no Editor de Associação. Para obter mais informações, consulte Como criar uma associação entre entidades.

Métodos de associação

Aplicativos como Web Parts de dados corporativos do SharePoint consomem associações chamando métodos na classe de serviço de uma entidade. Você pode adicionar métodos à classe de serviço de uma entidade selecionando-os no Editor de Associação.

Por padrão, o Editor de Associação adiciona um método de Navegação de Associação às entidades de origem e de destino. Um método de navegação por associações na entidade de origem permite que os consumidores recuperem uma lista de entidades de destino. Um método de Navegação de Associação na entidade de destino permite que os consumidores obtenham a entidade de origem relacionada a uma entidade de destino.

Você deve adicionar o código a cada um desses métodos para retornar as informações apropriadas. Você também pode adicionar outros tipos de métodos para dar suporte a cenários mais avançados. Para obter mais informações sobre cada um desses métodos, consulte Operações com suporte.

Tipos de associações

Você pode criar dois tipos de associações no designer BDC: associações estrangeiras baseadas em chave e associações estrangeiras sem chave.

Associação baseada em chave estrangeira

Você pode criar uma associação baseada em chave estrangeira relacionando um identificador da entidade de origem a descritores de tipo definidos na entidade de destino. Essa relação permite que os consumidores do modelo forneçam uma interface do usuário aprimorada para seus usuários. Por exemplo, um formulário no Outlook que permite que um usuário crie um pedido de vendas que possa exibir clientes em uma lista suspensa; ou uma lista de pedidos de vendas no SharePoint que permite aos usuários abrir uma página de perfil para um cliente.

Para criar uma associação baseada em chave estrangeira, relate identificadores e descritores de tipo que compartilham o mesmo nome e tipo. Por exemplo, você pode criar uma associação baseada em chave estrangeira entre uma Contact entidade e uma SalesOrder entidade. A entidade SalesOrder retorna um descritor de tipo ContactID como parte do parâmetro de retorno dos métodos Localizador ou Localizador Específico. Ambos os descritores de tipo aparecem no Editor de Associação. Para criar uma relação baseada em chave estrangeira entre a entidade Contact e a entidade SalesOrder, escolha o identificador ContactID ao lado de cada um desses campos.

Adicione código ao método Association Navigator da entidade de origem que retorna uma coleção de entidades de destino. O exemplo a seguir retorna os pedidos de vendas de um contato.

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

Adicione código ao método Association Navigator da entidade de destino que retorna uma entidade de origem. O exemplo a seguir retorna o contato relacionado ao pedido de vendas.

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;

}

Associação sem chave estrangeira

Você pode criar uma associação sem mapear identificadores para descritores de tipo de campo. Crie esse tipo de associação quando a entidade de origem não tiver uma relação direta com a entidade de destino. Por exemplo, uma tabela SalesOrderDetail não tem uma chave estrangeira que mapeia para uma chave primária em uma tabela Contact.

Se você quiser exibir informações na tabela SalesOrderDetail que se relacionem a Contact, poderá criar uma associação sem chave estrangeira entre a entidade Contact e a entidade SalesOrderDetail.

No método de Navegação de Associação da Contact entidade, retorne as SalesOrderDetail entidades unindo tabelas ou chamando um procedimento armazenado.

O exemplo a seguir retorna detalhes de todos os pedidos de vendas unindo tabelas.

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

No método de navegação de associação da entidade SalesOrderDetail, retorne o Contact relacionado. O exemplo a seguir demonstra isso.

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