Compartir a través de


Propiedades de navegación de api web

En el documento $metadata CSDL, cada tipo de entidad que no es abstracto tiene NavigationProperty elementos. NavigationProperty los elementos describen los datos relacionados con el tipo de entidad actual. Al recuperar un registro, puede expandir las propiedades de navegación para incluir datos relacionados.

En la tabla siguiente se describen los atributos de NavigationProperty los elementos.

Atributo Description
Name Nombre de la propiedad de navegación; distingue mayúsculas de minúsculas
Type Tipo de entidad relacionado; puede ser un valor único o una colección de un tipo
Partner El nombre de la propiedad de navegación en el otro lado de la relación
Nullable="false" Si el valor puede ser NULL

Importante

Hay dos tipos de propiedades de navegación: con valores únicos y con valores de colección. Esta distinción es importante porque las funcionalidades de cada tipo de propiedad de navegación son diferentes.

Propiedades de navegación de un solo valor

Cuando una propiedad Type de navegación hace referencia a un valor único, representa una relación uno a varios que crea una referencia a otro registro de tabla. Normalmente, esta relación se denomina búsqueda. El ejemplo siguiente es la propiedad de navegación de la account tabla createdby :

<NavigationProperty 
    Name="createdby" 
    Type="mscrm.systemuser" 
    Nullable="false" 
    Partner="lk_accountbase_createdby">
    <ReferentialConstraint 
        Property="_createdby_value" 
        ReferencedProperty="systemuserid" />
</NavigationProperty>

Esta propiedad de navegación con un solo valor conecta varios account registros a un único systemuser registro. Cada systemuser registro tiene una propiedad de navegación con valores de colección denominada lk_accountbase_createdby que la conecta a los account registros que el usuario ha creado.

Estos valores se almacenan en definiciones de relación. Puede acceder a ellos mediante el SDK OneToManyRelationshipMetadata o el tipo de entidad Web API OneToManyRelationshipMetadata, como se describe en la tabla siguiente.

Atributo Propiedad OneToManyRelationshipMetadata Description
Name ReferencingEntityNavigationPropertyName El nombre de la propiedad de navegación de un solo valor.
Partner ReferencedEntityNavigationPropertyName El nombre de la colección de navegación de un solo valor.

Propiedades de búsqueda

Las propiedades de navegación con un valor único tienen un ReferentialConstraint con un Property atributo que hace referencia a una propiedad de búsqueda. Las propiedades de búsqueda usan la siguiente convención de nomenclatura: _<name>_value. Obtenga más información sobre las propiedades de búsqueda.

ReferentialConstraint tiene un ReferencedProperty atributo que identifica el nombre de clave principal del tipo de entidad relacionado.

En la mayoría de los casos, el <name> que se encuentra en la propiedad de búsqueda coincide con el nombre de la propiedad de navegación, excepto cuando la propiedad de navegación con un solo valor representa una búsqueda de varias tablas.

Búsquedas en varias tablas

Cuando la propiedad de navegación de un solo valor forma parte de una búsqueda de varias tablas, o polimórfica, hay una única propiedad de búsqueda que es ReferentialConstraint para más de una propiedad de navegación de un solo valor.

Un tipo de entidad puede tener algo parecido a la siguiente combinación, donde una sola propiedad de búsqueda admite varias propiedades de navegación con un solo _customerid_value valor que representan una búsqueda de varias tablas. Hay una propiedad de navegación con un solo valor para cada tipo de tabla compatible con la búsqueda de varias tablas.

<EntityType 
    Name="socialprofile" 
    BaseType="mscrm.crmbaseentity">
    <Key>
        <PropertyRef Name="socialprofileid" />
    </Key>
    <Property 
        Name="_customerid_value" <!-- lookup property -->
        Type="Edm.Guid">
        <Annotation 
            Term="Org.OData.Core.V1.Description" 
            String="Shows the customer that this social profile belongs to." />
    </Property>
    <NavigationProperty 
        Name="customerid_contact" <!-- Name different from lookup property -->
        Type="mscrm.contact" 
        Nullable="false" 
        Partner="Socialprofile_customer_contacts">
        <ReferentialConstraint 
            Property="_customerid_value" <!--  Reference to lookup property  -->
            ReferencedProperty="contactid" />
    </NavigationProperty>
    <NavigationProperty 
        Name="customerid_account" <!-- Name different from lookup property -->
        Type="mscrm.account" 
        Nullable="false" 
        Partner="Socialprofile_customer_accounts">
        <ReferentialConstraint 
            Property="_customerid_value"  <!--  Reference to lookup property  -->
            ReferencedProperty="accountid" />
    </NavigationProperty>
</EntityType>

En estos casos, al establecer el valor de cualquiera de las propiedades de navegación con un solo valor, se establecen todas las demás propiedades de navegación de un solo valor participantes en null. El valor GUID de la propiedad de consulta correspondiente cambia, pero necesita obtener anotaciones específicas para saber a qué tabla se refiere ahora. Más información: Datos de propiedades de búsqueda

Propiedades de navegación valoradas como colección

Cuando una propiedad de navegación Type se refiere a un valor de colección, representa una relación de varios a uno o de varios a varios. El ejemplo siguiente es la propiedad de navegación Account_Tasks de la entidad de cuenta:

<NavigationProperty 
    Name="Account_Tasks" 
    Type="Collection(mscrm.task)" 
    Partner="regardingobjectid_account_task" 
/>

Esta propiedad de navegación conecta un account registro a muchos task registros. Cada task tiene una propiedad de navegación con un solo valor denominada regardingobjectid_account_task que hace referencia a account como el objeto con respecto.

La forma en que trabaja con las propiedades de navegación valoradas como colección mediante OData es la misma independientemente de si la relación es de uno a varios o de varios a varios. Ambos se consideran colecciones e interactúan con ellas de la misma manera.

Relaciones de muchos a uno

Una relación de muchos a uno es un reflejo de la relación de uno a muchos. Tiene una propiedad de navegación de un solo valor de partner. En el ejemplo anterior de propiedades de navegación con un solo valor , examinamos la createdby propiedad de navegación con un solo valor para el tipo de account entidad.

En el tipo de entidad systemuser, existe el partner de la propiedad de navegación valorada como colección denominada lk_accountbase_createdby.

<NavigationProperty Name="lk_accountbase_createdby"
    Type="Collection(mscrm.account)"
    Partner="createdby" />

Relaciones de varios a varios

Cuando Name y Partner de la propiedad de navegación valorada como colección son iguales, representa una relación de varios a varios.

Las relaciones varios a varios tiene algunos detalles de implementación que puede encontrar en los documentos de servicio. Para la mayoría de los casos de uso, puede omitirlos.

Por ejemplo, cada relación de varios a varios tiene una tabla de intersección que la respalda. Estas tablas de intersección tienen tipos de entidad que normalmente tienen cuatro propiedades de solo lectura. En el ejemplo siguiente, el tipo de entidad teammembership es una tabla de intersección que admite una relación de muchos a muchos entre los tipos de entidad systemuser y team.

<EntityType Name="teammembership"
    BaseType="mscrm.crmbaseentity">
    <Key>
        <PropertyRef Name="teammembershipid" />
    </Key>
    <Property Name="systemuserid"
        Type="Edm.Guid" />
    <Property Name="versionnumber"
        Type="Edm.Int64" />
    <Property Name="teammembershipid"
        Type="Edm.Guid" />
    <Property Name="teamid"
        Type="Edm.Guid" />
</EntityType>

No se puede trabajar con tipos de entidad que representen tablas de intersección directamente porque todas las propiedades están configuradas como de solo lectura. Realice operaciones en las respectivas propiedades de navegación valoradas como colección para cada tipo de entidad. Más información: Asociación y desasociación de filas de tabla mediante la API web

Para esta relación de varios a varios, el tipo de entidad systemuser tiene la siguiente propiedad de navegación valorada como colección:

<NavigationProperty Name="teammembership_association"
    Type="Collection(mscrm.team)"
    Partner="teammembership_association" />

El tipo de entidad team tiene esta propiedad de navegación valorada como colección:

<NavigationProperty Name="teammembership_association"
    Type="Collection(mscrm.systemuser)"
    Partner="teammembership_association" />

Estos valores se almacenan en definiciones de relación. Puede acceder a ellos mediante el SDK ManyToManyRelationshipMetadata o el tipo de entidad Web API ManyToManyRelationshipMetadata, como se describe en la tabla siguiente.

Atributo Propiedad ManyToManyRelationshipMetadata Description
Name Entity1NavigationPropertyName El nombre de la propiedad de navegación valorada como colección para uno de los tipos de entidad
Partner Entity2NavigationPropertyName El nombre de la propiedad de navegación valorada como colección para el otro tipo de entidad

Pasos siguientes

Obtenga información sobre las definiciones de acción.

Consulte también

Operaciones y tipos de API web
Documentos del servicio API web
Web API EntityTypes
Propiedades de api web
Acciones de API web
Funciones de API web
Tipos complejos y de enumeración de API web
Usar la API web de Dataverse
Versión de OData: 4.0 Parte 3: Common Schema Definition Language (CSDL) Plus Errata 03 7.1 Element edm:NavigationProperty