Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede definir relaciones entre entidades en el modelo de conectividad a datos profesionales (BDC) mediante la creación de asociaciones. Visual Studio genera métodos que proporcionan a los consumidores del modelo información sobre cada asociación. Los elementos web, listas o aplicaciones personalizadas de SharePoint pueden consumir estos métodos para mostrar relaciones de datos en una interfaz de usuario (UI).
Creación de una asociación
Para crear una asociación, elija el control Asociación en el Cuadro de herramientas de Visual Studio, elija la primera entidad (denominada entidad de origen) y, a continuación, elija la segunda entidad (denominada entidad de destino). Puede definir los detalles de la asociación en el Editor de asociaciones. Para obtener más información, vea Cómo: Crear una asociación entre entidades.
Métodos de asociación
Las aplicaciones como los elementos web de datos profesionales de SharePoint consumen asociaciones llamando a métodos en la clase de servicio de una entidad. Puede agregar métodos a la clase de servicio de una entidad seleccionándolas en el Editor de asociaciones.
De forma predeterminada, el Editor de asociaciones agrega un método de navegación de asociación a las entidades de origen y destino. Un método de navegación de asociación en la entidad de origen permite a los consumidores recuperar una lista de entidades de destino. Un método de navegación de asociación en la entidad de destino permite a los consumidores recuperar la entidad de origen relacionada con una entidad de destino.
Debe agregar el código a cada uno de estos métodos para devolver la información adecuada. También puede agregar otros tipos de métodos para admitir escenarios más avanzados. Para obtener más información sobre cada uno de estos métodos, vea Operaciones admitidas.
Tipos de asociaciones
Puede crear dos tipos de asociaciones en el diseñador de BDC: asociaciones basadas en claves externas y asociaciones sin claves externas.
Asociación basada en claves externas
Puede crear una asociación basada en claves externas si relaciona un identificador de la entidad de origen con descriptores de tipo definidos en la entidad de destino. Esta relación permite a los consumidores del modelo proporcionar una interfaz de usuario mejorada para sus usuarios. Por ejemplo, un formulario de Outlook que permite a un usuario crear un pedido de ventas que pueda mostrar a los clientes en una lista desplegable; o una lista de pedidos de ventas en SharePoint que permite a los usuarios abrir una página de perfil para un cliente.
Para crear una asociación basada en claves externas, relaciona identificadores y descriptores de tipo que comparten el mismo nombre y tipo. Por ejemplo, puede crear una asociación basada en clave externa entre una Contact entidad y una SalesOrder entidad. La SalesOrder entidad devuelve un ContactID descriptor de tipo como parte del parámetro de retorno de los métodos Finder o Specific Finder. Ambos descriptores de tipo aparecen en el Editor de asociaciones. Para crear una relación basada en clave externa entre la entidad Contact y la entidad SalesOrder, elija el identificador ContactID situado junto a cada uno de estos campos.
Agregue código al método Association Navigator de la entidad de origen que devuelve una colección de entidades de destino. En el ejemplo siguiente se devuelven los pedidos de ventas de un contacto.
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;
}
Agregue código al método Association Navigator de la entidad de destino que devuelve una entidad de origen. En el ejemplo siguiente se devuelve el contacto relacionado con el pedido de venta.
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;
}
Asociación sin clave externa
Puede crear una asociación sin asociar identificadores con descriptores de tipos de campo. Cree este tipo de asociación cuando la entidad de origen no tenga una relación directa con la entidad de destino. Por ejemplo, una SalesOrderDetail tabla no tiene una clave externa que se asigna a una clave principal de una Contact tabla.
Si desea mostrar información en la tabla SalesOrderDetail que esté relacionada con Contact, puede crear una asociación sin clave externa entre la entidad Contact y la entidad SalesOrderDetail.
En el método de navegación por asociación de la Contact entidad, devuelva las entidades de SalesOrderDetail combinando tablas o llamando a un procedimiento almacenado.
En el ejemplo siguiente se devuelven detalles de todos los pedidos de ventas mediante la combinación de tablas.
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;
}
En el método de navegación de asociación de la SalesOrderDetail entidad, devuelva el Contact relacionado. En el siguiente ejemplo se muestra cómo hacerlo.
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;
}