El lenguaje de especificación de asignaciones (MSL) es un lenguaje basado en XML que describe la asignación entre el modelo conceptual y el modelo de almacenamiento de una aplicación de Entity Framework.
En una aplicación de Entity Framework, los metadatos de asignación se cargan desde un archivo .msl (escrito en MSL) en tiempo de compilación. Entity Framework usa los metadatos de asignación en tiempo de ejecución para convertir las consultas realizadas contra el modelo conceptual en comandos específicos del almacenamiento.
Entity Framework Designer (EF Designer) almacena la información de asignación en un archivo .edmx en tiempo de diseño. Entity Designer usa la información de un archivo .edmx en tiempo de compilación para crear el archivo .msl que Entity Framework necesita en tiempo de ejecución.
Los nombres de todos los tipos de modelos conceptuales o de almacenamiento a los que se hace referencia en MSL deben estar calificados con sus respectivos nombres de espacios de nombres. Para obtener información sobre el nombre del espacio de nombres del modelo conceptual, consulte Especificación CSDL. Para más información sobre el nombre del espacio de nombres del modelo de almacenamiento, consulte Especificación SSDL.
Las versiones de MSL se diferencian por los espacios de nombres XML.
El elemento Alias del lenguaje de especificación de asignaciones (MSL) es un elemento secundario del elemento Mapping que se utiliza para definir los alias de los espacios de nombres del modelo conceptual y del modelo de almacenamiento. Los nombres de todos los tipos de modelos conceptuales o de almacenamiento a los que se hace referencia en MSL deben estar calificados con sus respectivos nombres de espacios de nombres. Para más información sobre el nombre del espacio de nombres del modelo conceptual, consulte Schema (Elemento) (CSDL). Para más información sobre el nombre del espacio de nombres del modelo de almacenamiento, consulte Schema (Elemento) (SSDL).
El elemento Alias no puede tener elementos secundarios.
Atributos aplicables
En la tabla siguiente se describen los atributos que se pueden aplicar al elemento Alias.
Nombre del atributo
Es obligatorio
Valor
Clave
Sí
El alias del espacio de nombres que se especifica con el atributo Value.
Valor
Sí
El espacio de nombres para el que el valor del elemento Key es un alias.
Ejemplo
En el siguiente ejemplo se muestra un elemento Alias que define un alias, c, para los tipos que se definen en el modelo conceptual.
El elemento AssociationEnd del lenguaje de especificación de asignaciones (MSL) se utiliza cuando las funciones de modificación de un tipo de entidad en el modelo conceptual están asignadas a procedimientos almacenados en la base de datos subyacente. Si un procedimiento almacenado de modificación toma un parámetro cuyo valor está contenido en una propiedad de asociación, el elemento AssociationEnd asigna el valor de propiedad al parámetro. Para obtener más información, vea el ejemplo siguiente.
Para más información sobre las funciones de modificación de asignaciones de tipos de entidad a procedimientos almacenados, consulte Elemento ModificationFunctionMapping (MSL) y Tutorial: Asignación de una entidad a procedimientos almacenados.
El elemento AssociationEnd puede tener los elementos secundarios siguientes:
ScalarProperty
Atributos aplicables
En la tabla siguiente se describen los atributos aplicables al elemento AssociationEnd.
Nombre del atributo
Es obligatorio
Valor
AssociationSet
Sí
El nombre de la asociación que se está asignando.
Desde
Sí
El valor del atributo FromRole de la propiedad de navegación que corresponde a la asociación que se está asignando. Para más información, consulte Elemento NavigationProperty (CSDL).
Hasta
Sí
El valor del atributo ToRole de la propiedad de navegación que corresponde a la asociación que se está asignando. Para más información, consulte Elemento NavigationProperty (CSDL).
Ejemplo
Considere el siguiente tipo de entidad del modelo conceptual:
Considere también el siguiente procedimiento almacenado:
CREATE PROCEDURE [dbo].[UpdateCourse]
@CourseID int,
@Title nvarchar(50),
@Credits int,
@DepartmentID int
AS
UPDATE Course SET Title=@Title,
Credits=@Credits,
DepartmentID=@DepartmentID
WHERE CourseID=@CourseID;
Para asignar la función de actualización de la entidad Course a este procedimiento almacenado, debe proporcionar un valor al parámetro DepartmentID. El valor para DepartmentID no corresponde a una propiedad del tipo de entidad; está contenido en una asociación independiente cuya asignación se muestra aquí:
El siguiente código muestra el elemento AssociationEnd que se utiliza para asignar la propiedad DepartmentID de la asociación FK_Course_Department al procedimiento almacenado UpdateCourse (al que la función de actualización del tipo de entidad Course está asignada):
El elemento AssociationSetMapping del lenguaje de especificación de asignaciones (MSL) define la asignación entre una asociación del modelo conceptual y columnas de tabla de la base de datos subyacente.
Las asociaciones del modelo conceptual son tipos cuyas propiedades representan columnas de clave primaria y clave externa de la base de datos subyacente. El elemento AssociationSetMapping utiliza dos elementos EndProperty para definir las asignaciones entre las propiedades de tipo de asociación y las columnas de la base de datos. Puede definir condiciones en estas asignaciones con el elemento Condition. Asigne las funciones de inserción, actualización y eliminación para las asociaciones a procedimientos almacenados de la base de datos mediante el elemento ModificationFunctionMapping. Defina las asignaciones de solo lectura entre las asociaciones y columnas de tabla mediante una cadena de Entity SQL en un elemento QueryView.
Nota
Si se define una restricción referencial para una asociación del modelo conceptual, la asociación no necesita estar asignada con un elemento AssociationSetMapping. Si un elemento AssociationSetMapping está presente para una asociación que tiene una restricción referencial, se omitirán las asignaciones definidas en el elemento AssociationSetMapping. Para más información, consulte Elemento ReferentialConstraint (CSDL).
El elemento AssociationSetMapping puede tener los elementos secundarios siguientes
QueryView (cero o uno)
EndProperty (cero o dos)
Condition (cero o más)
ModificationFunctionMapping (cero o uno)
Atributos aplicables
La siguiente tabla describe los atributos que pueden aplicarse al elemento AssociationSetMapping.
Nombre del atributo
Es obligatorio
Valor
Nombre
Sí
El nombre del conjunto de asociaciones del modelo conceptual que se está asignando.
TypeName
No
El nombre completo, calificado con el espacio de nombres, del tipo de asociación del modelo conceptual que se está asignando.
StoreEntitySet
No
El nombre de la tabla que se está asignando.
Ejemplo
En el siguiente ejemplo se muestra un elemento AssociationSetMapping en el que la asociación FK_Course_Department establecida en el modelo conceptual se asigna a la tabla Course de la base de datos. Las asignaciones entre propiedades de tipo de asociación y columnas de tabla se especifican en elementos EndProperty secundarios.
Un elemento ComplexProperty del lenguaje de especificación de asignaciones (MSL) define la asignación entre una propiedad de tipo complejo en un tipo de entidad del modelo conceptual y las columnas de la tabla de la base de datos subyacente. Las asignaciones entre columnas y propiedades se especifican en elementos secundarios ScalarProperty.
El elemento de propiedad ComplexType puede tener los elementos secundarios siguientes:
ScalarProperty (cero o más)
ComplexProperty (cero o más)
ComplexTypeMapping (cero o más)
Condition (cero o más)
Atributos aplicables
En la tabla siguiente se describen los atributos aplicables al elemento ComplexProperty:
Nombre del atributo
Es obligatorio
Valor
Nombre
Sí
El nombre de la propiedad compleja de un tipo de entidad del modelo conceptual que se está asignando.
TypeName
No
El nombre completo, calificado con el espacio de nombres, del tipo de propiedad del modelo conceptual.
Ejemplo
El siguiente ejemplo se basa en el modelo School. El siguiente tipo complejo se ha agregado al modelo conceptual:
El elemento ComplexTypeMapping del lenguaje de especificación de asignaciones (MSL) es un elemento secundario del elemento ResultMapping y define la asignación entre una importación de función en el modelo conceptual y un procedimiento almacenado en la base de datos subyacente cuando se cumplen las siguientes condiciones:
La importación de función devuelve un tipo complejo conceptual.
Los nombres de las columnas devueltas por el procedimiento almacenado no coinciden exactamente con los nombres de las propiedades en el tipo complejo.
De forma predeterminada, la asignación entre las columnas devueltas por un procedimiento almacenado y un tipo complejo se basa en los nombres de las propiedades y de las columnas. Si los nombres de las columnas no coinciden exactamente con los nombres de las propiedades, debe utilizar el elemento ComplexTypeMapping para definir la asignación. Para obtener un ejemplo de la asignación predeterminada, consulte Elemento FunctionImportMapping (MSL).
El elemento ComplexTypeMapping puede tener los elementos secundarios siguientes:
ScalarProperty (cero o más)
Atributos aplicables
En la tabla siguiente se describen los atributos aplicables al elemento ComplexTypeMapping.
Nombre del atributo
Es obligatorio
Valor
TypeName
Sí
El nombre completo, incluido el espacio de nombres, del tipo complejo que se está asignando.
Ejemplo
Observe el siguiente procedimiento almacenado:
CREATE PROCEDURE [dbo].[GetGrades]
@student_Id int
AS
SELECT EnrollmentID as enroll_id,
Grade as grade,
CourseID as course_id,
StudentID as student_id
FROM dbo.StudentGrade
WHERE StudentID = @student_Id
Considere también el siguiente tipo complejo del modelo conceptual:
Para crear una importación de función que devuelva instancias del tipo complejo anterior, la asignación entre las columnas devueltas por el procedimiento almacenado y el tipo de entidad se debe definir en un elemento ComplexTypeMapping:
El elemento Condition del lenguaje de especificación de asignaciones (MSL) establece condiciones en las asignaciones entre el modelo conceptual y la base de datos subyacente. La asignación que se define dentro de un nodo XML es válida si se cumplen todas las condiciones especificadas en elementos Condition secundarios. De lo contrario, la asignación no es válida. Por ejemplo, si un elemento MappingFragment contiene uno o más elementos Condition secundarios, la asignación definida dentro del nodo MappingFragment solo será válida si se cumplen todas las condiciones de los elementos Condition secundarios.
Cada condición se puede aplicar a un Name (el nombre de una propiedad de entidad del modelo conceptual, especificada mediante el atributo Name), o a un ColumnName (el nombre de una columna de la base de datos, especificada mediante el atributo ColumnName). Cuando se establece el atributo Name, la condición se comprueba en comparación con un valor de propiedad de la entidad. Cuando se establece el atributo ColumnName, la condición se comprueba en comparación con un valor de columna. Solo se puede especificar un atributo Name o ColumnName en un elemento Condition.
Nota
Cuando el elemento Condition se utiliza dentro de un elemento FunctionImportMapping, solo el atributo Name no es aplicable.
El elemento Condition puede ser un secundario de los elementos siguientes:
AssociationSetMapping
ComplexProperty
EntitySetMapping
MappingFragment
EntityTypeMapping
El elemento Condition puede no tener elementos secundarios.
Atributos aplicables
En la tabla siguiente se describen los atributos aplicables al elemento Condition:
Nombre del atributo
Es obligatorio
Valor
ColumnName
No
El nombre de la columna de la tabla cuyo valor se utiliza para evaluar la condición.
IsNull
No
True o False. Si el valor es True y el valor de la columna es null, o si el valor es False y el valor de la columna no es null, la condición es verdadera. De lo contrario, la condición es falsa. Los atributos IsNull y Value no se pueden utilizar al mismo tiempo.
Valor
No
El valor con el que se compara el valor de la columna. Si los valores son los mismos, la condición es verdadera. De lo contrario, la condición es falsa. Los atributos IsNull y Value no se pueden utilizar al mismo tiempo.
Nombre
No
El nombre de la propiedad de entidad del modelo conceptual cuyo valor se utiliza para evaluar la condición. Este atributo no es aplicable si el elemento Condition se utiliza dentro de un elemento FunctionImportMapping.
Ejemplo
En el ejemplo siguiente se muestran elementos Condition como elementos secundarios de MappingFragment. Si HireDate no es null y EnrollmentDate es null, los datos se asignan entre el tipo SchoolModel.Instructor y las columnas PersonID y HireDate de la tabla Person. Si EnrollmentDate no es null y HireDate es null, los datos se asignan entre el tipo SchoolModel.Student y las columnas PersonID y Enrollment de la tabla Person.
El elemento DeleteFunction del lenguaje de especificación de asignaciones (MSL) asigna la función de eliminación de un tipo de entidad o asociación del modelo conceptual a un procedimiento almacenado de la base de datos subyacente. Los procedimientos almacenados a los que están asignados las funciones de modificación se deben declarar en el modelo de almacenamiento. Para obtener más información, vea Elementos de función (SSDL).
Nota
Si no asigna las tres operaciones de inserción, actualización o eliminación de un tipo de entidad a procedimientos almacenados, se producirá un error en las operaciones no asignadas al ejecutarlas y se producirá una excepción UpdateException.
DeleteFunction aplicado a EntityTypeMapping
Cuando se aplica al elemento EntityTypeMapping, el elemento DeleteFunction asigna la función de eliminación de un tipo de entidad del modelo conceptual a un procedimiento almacenado.
El elemento DeleteFunction puede tener los elementos secundarios siguientes cuando se aplica a un elemento EntityTypeMapping:
AssociationEnd (cero o más)
ComplexProperty (cero o más)
ScalarProperty (cero o más)
Atributos aplicables
En la tabla siguiente se describen los atributos que se pueden aplicar al elemento DeleteFunction cuando este se aplica a un elemento EntityTypeMapping.
Nombre del atributo
Es obligatorio
Valor
FunctionName
Sí
El nombre completo, calificado con el espacio de nombres, del procedimiento almacenado al que la función de eliminación está asignada. El procedimiento almacenado se debe declarar en el modelo de almacenamiento.
RowsAffectedParameter
No
El nombre del parámetro de salida que devuelve el número de filas afectadas.
Ejemplo
El siguiente ejemplo se basa en el modelo School y muestra el elemento DeleteFunction asignando la función de eliminación del tipo de entidad Person al procedimiento almacenado DeletePerson. El procedimiento almacenado DeletePerson se declara en el modelo de almacenamiento.
Cuando se aplica al elemento AssociationSetMapping, el elemento DeleteFunction asigna la función de eliminación de una asociación del modelo conceptual a un procedimiento almacenado.
El elemento DeleteFunction puede tener los elementos secundarios siguientes cuando se aplica a un elemento AssociationSetMapping:
EndProperty
Atributos aplicables
En la tabla siguiente se describen los atributos que se pueden aplicar al elemento DeleteFunction cuando este se aplica al elemento AssociationSetMapping.
Nombre del atributo
Es obligatorio
Valor
FunctionName
Sí
El nombre completo, calificado con el espacio de nombres, del procedimiento almacenado al que la función de eliminación está asignada. El procedimiento almacenado se debe declarar en el modelo de almacenamiento.
RowsAffectedParameter
No
El nombre del parámetro de salida que devuelve el número de filas afectadas.
Ejemplo
El siguiente ejemplo se basa en el modelo School y muestra el elemento DeleteFunction que se utiliza para asignar la función de eliminación de la asociación CourseInstructor al procedimiento almacenado DeleteCourseInstructor. El procedimiento almacenado DeleteCourseInstructor se declara en el modelo de almacenamiento.
El elemento EndProperty del lenguaje de especificación de asignaciones (MSL) define la asignación entre un extremo o una función de modificación de una asociación de modelo conceptual y la base de datos subyacente. La asignación entre columnas y propiedades se especifica en un elemento secundario ScalarProperty.
Cuando un elemento EndProperty se utiliza para definir la asignación para el extremo de una asociación del modelo conceptual, constituye un elemento secundario de un elemento AssociationSetMapping. Cuando el elemento EndProperty se utiliza para definir la asignación para una función de modificación de una asociación del modelo conceptual, constituye un elemento secundario de un elemento InsertFunction o un elemento DeleteFunction.
El elemento EndProperty puede tener los elementos secundarios siguientes:
ScalarProperty (cero o más)
Atributos aplicables
En la tabla siguiente se describen los atributos aplicables al elemento EndProperty:
Nombre del atributo
Es obligatorio
Valor
Nombre
Sí
El nombre del extremo de la asociación que se está asignando.
Ejemplo
En el siguiente ejemplo se muestra un elemento AssociationSetMapping en el que la asociación FK_Course_Department establecida en el modelo conceptual se asigna a la tabla Course de la base de datos. Las asignaciones entre propiedades de tipo de asociación y columnas de tabla se especifican en elementos EndProperty secundarios.
En el siguiente ejemplo se muestra el elemento EndProperty que asigna las funciones de eliminación e inserción de una asociación (CourseInstructor) a procedimientos almacenados de la base de datos subyacente. Las funciones asignadas se declaran en el modelo de almacenamiento.
El elemento EntityContainerMapping del lenguaje de especificación de asignaciones (MSL) asigna el contenedor de entidades del modelo conceptual al contenedor de entidades del modelo de almacenamiento. El elemento EntityContainerMapping es un elemento secundario del elemento Mapping.
El elemento EntityContainerMapping puede tener los elementos secundarios siguientes (en el orden mostrado):
EntitySetMapping (cero o más)
AssociationSetMapping (cero o más)
FunctionImportMapping (cero o más)
Atributos aplicables
La siguiente tabla describe los atributos que pueden aplicarse al elemento EntityContainerMapping.
Nombre del atributo
Es obligatorio
Valor
StorageModelContainer
Sí
El nombre del contenedor de entidades del modelo de almacenamiento que se está asignando.
CdmEntityContainer
Sí
El nombre del contenedor de entidades del modelo conceptual que se está asignando.
GenerateUpdateViews
No
True o False. Si es False, no se genera ninguna vista de actualización. Este atributo debería estar establecido en False cuando se tiene una asignación de solo lectura que no sería válida debido a que los datos no pueden realizar una operación de ida y vuelta correctamente. El valor predeterminado es True.
Ejemplo
En el siguiente ejemplo se muestra un elemento EntityContainerMapping que asigna el contenedor SchoolModelEntities (el contenedor de entidades del modelo conceptual) al contenedor SchoolModelStoreContainer (el contenedor de entidades del modelo de almacenamiento):
El elemento EntitySetMapping del lenguaje de especificación de asignaciones (MSL) asigna todos los tipos de un conjunto de entidades del modelo conceptual a conjuntos de entidades del modelo de almacenamiento. Un conjunto de entidades del modelo conceptual es un contenedor lógico para instancias de entidades del mismo tipo (y tipos derivados). Un conjunto de entidades del modelo de almacenamiento representa una tabla o vista de la base de datos subyacente. El valor del atributo Name del elemento EntitySetMapping especifica el conjunto de entidades del modelo conceptual. La tabla o vista asignada se especifica mediante el atributo StoreEntitySet en cada elemento MappingFragment secundario o en el propio elemento EntitySetMapping.
El elemento EntitySetMapping puede tener los elementos secundarios siguientes:
EntityTypeMapping (cero o más)
QueryView (cero o uno)
MappingFragment (cero o más)
Atributos aplicables
La siguiente tabla describe los atributos que pueden aplicarse al elemento EntitySetMapping.
Nombre del atributo
Es obligatorio
Valor
Nombre
Sí
El nombre del conjunto de entidades del modelo conceptual que se está asignando.
TypeName1
No
El nombre del tipo de entidad del modelo conceptual que se está asignando.
StoreEntitySet1
No
El nombre del conjunto de entidades del modelo de almacenamiento al que se está asignando.
MakeColumnsDistinct
No
True o False dependiendo de si solo se devuelven filas distintas. Si este atributo está establecido en True, el atributo GenerateUpdateViews del elemento EntityContainerMapping se debe establecer en False.
1 Los atributos TypeName y StoreEntitySet se pueden usar en lugar de los elementos secundarios EntityTypeMapping y MappingFragment para asignar un único tipo de entidad a una única tabla.
Ejemplo
El siguiente ejemplo muestra un elemento EntitySetMapping que asigna tres tipos (un tipo base y dos tipos derivados) en el conjunto de entidades Courses del modelo conceptual a tres tablas diferentes de la base de datos subyacente. Las tablas se especifican mediante el atributo StoreEntitySet en cada elemento MappingFragment.
El elemento EntityTypeMapping del lenguaje de especificación de asignaciones (MSL) define la asignación entre un tipo de entidad del modelo conceptual y las tablas o vistas de la base de datos subyacente. Para obtener información sobre los tipos de entidad del modelo conceptual y las tablas o vistas de la base de datos subyacente, consulte EntityType (Elemento) (CSDL) y EntitySet (Elemento) (SSDL). El atributo TypeName del elemento EntityTypeMapping especifica el tipo de entidad del modelo conceptual que se está asignando. El atributo StoreEntitySet del elemento MappingFragment secundario especifica la tabla o vista que se está asignando.
El elemento secundario ModificationFunctionMapping se puede utilizar para asignar las funciones de inserción, actualización o eliminación de tipos de entidad a procedimientos almacenados de la base de datos.
El elemento EntityTypeMapping puede tener los elementos secundarios siguientes:
MappingFragment (cero o más)
ModificationFunctionMapping (cero o uno)
ScalarProperty
Condition
Nota
Los elementos MappingFragment y ModificationFunctionMapping no pueden ser elementos secundarios del elemento EntityTypeMapping al mismo tiempo.
Nota
Los elementos ScalarProperty y Condition solo pueden ser elementos secundarios del elemento EntityTypeMapping cuando se utiliza dentro de un elemento FunctionImportMapping.
Atributos aplicables
La siguiente tabla describe los atributos que pueden aplicarse al elemento EntityTypeMapping.
Nombre del atributo
Es obligatorio
Valor
TypeName
Sí
El nombre completo, calificado con el espacio de nombres, del tipo de entidad del modelo conceptual que se está asignando. Si el tipo es abstracto o un tipo derivado, el valor debe ser IsOfType(Namespace-qualified_type_name).
Ejemplo
En el ejemplo siguiente se muestra un elemento EntitySetMapping con dos elementos EntityTypeMapping secundarios. En el primer elemento EntityTypeMapping, el tipo de entidad SchoolModel.Person se asigna a la tabla Person. En el segundo elemento EntityTypeMapping, la funcionalidad de actualización del tipo SchoolModel.Person se asigna a un procedimiento almacenado, UpdatePerson, en la base de datos.
En el ejemplo siguiente se muestra la asignación de una jerarquía de tipos en la que el tipo raíz es abstracto. Tenga en cuenta el uso de la sintaxis IsOfType para los atributos TypeName.
El elemento FunctionImportMapping del lenguaje de especificación de asignaciones (MSL) define la asignación entre una importación de función del modelo conceptual y un procedimiento almacenado o función de la base de datos subyacente. Las importaciones de función se deben declarar en el modelo conceptual, mientras que los procedimientos almacenados se deben declarar en el modelo de almacenamiento. Para más información, consulte Elemento FunctionImport (CSDL) y Elemento Function (SSDL).
Nota
De forma predeterminada, si una importación de función devuelve un tipo de entidad del modelo conceptual o un tipo complejo, entonces los nombres de las columnas devueltas por el procedimiento almacenado subyacente deben coincidir exactamente con los nombres de las propiedades del tipo del modelo conceptual. Si los nombres de las columnas no coinciden exactamente con los nombres de las propiedades, la asignación se debe definir en un elemento ResultMapping.
El elemento FunctionImportMapping puede tener los elementos secundarios siguientes:
ResultMapping (cero o más)
Atributos aplicables
En la tabla siguiente se describen los atributos aplicables al elemento FunctionImportMapping:
Nombre del atributo
Es obligatorio
Valor
FunctionImportName
Sí
El nombre de la importación de función del modelo conceptual que se está asignando.
FunctionName
Sí
El nombre, calificado con el espacio de nombres, de la función del modelo de almacenamiento que se está asignando.
Ejemplo
El siguiente ejemplo se basa en el modelo School. Considere la siguiente función en el modelo de almacenamiento:
El elemento InsertFunction del lenguaje de especificación de asignaciones (MSL) asigna la función de inserción de un tipo de entidad o asociación del modelo conceptual a un procedimiento almacenado de la base de datos subyacente. Los procedimientos almacenados a los que están asignados las funciones de modificación se deben declarar en el modelo de almacenamiento. Para obtener más información, vea Elementos de función (SSDL).
Nota
Si no asigna las tres operaciones de inserción, actualización o eliminación de un tipo de entidad a procedimientos almacenados, se producirá un error en las operaciones no asignadas al ejecutarlas y se producirá una excepción UpdateException.
El elemento InsertFunction puede ser un elemento secundario del elemento ModificationFunctionMapping y se puede aplicar al elemento EntityTypeMapping o al elemento AssociationSetMapping.
InsertFunction aplicado a EntityTypeMapping
Cuando se aplica al elemento EntityTypeMapping, el elemento InsertFunction asigna la función de inserción de un tipo de entidad del modelo conceptual a un procedimiento almacenado.
El elemento InsertFunction puede tener los elementos secundarios siguientes cuando se aplica a un elemento EntityTypeMapping:
AssociationEnd (cero o más)
ComplexProperty (cero o más)
ResultBinding (cero o uno)
ScalarProperty (cero o más)
Atributos aplicables
En la tabla siguiente se describen los atributos que se pueden aplicar al elemento InsertFunction cuando este se aplica a un elemento EntityTypeMapping.
Nombre del atributo
Es obligatorio
Valor
FunctionName
Sí
El nombre completo, calificado con el espacio de nombres, del procedimiento almacenado al que la función de inserción está asignada. El procedimiento almacenado se debe declarar en el modelo de almacenamiento.
RowsAffectedParameter
No
El nombre del parámetro de salida que devuelve el número de filas afectadas.
Ejemplo
El siguiente ejemplo se basa en el modelo School y muestra el elemento InsertFunction que se utiliza para asignar la función de inserción del tipo de entidad Person al procedimiento almacenado InsertPerson. El procedimiento almacenado InsertPerson se declara en el modelo de almacenamiento.
Cuando se aplica al elemento AssociationSetMapping, el elemento InsertFunction asigna la función de inserción de una asociación del modelo conceptual a un procedimiento almacenado.
El elemento InsertFunction puede tener los elementos secundarios siguientes cuando se aplica a un elemento AssociationSetMapping:
EndProperty
Atributos aplicables
En la tabla siguiente se describen los atributos que se pueden aplicar al elemento InsertFunction cuando este se aplica al elemento AssociationSetMapping.
Nombre del atributo
Es obligatorio
Valor
FunctionName
Sí
El nombre completo, calificado con el espacio de nombres, del procedimiento almacenado al que la función de inserción está asignada. El procedimiento almacenado se debe declarar en el modelo de almacenamiento.
RowsAffectedParameter
No
El nombre del parámetro de salida que devuelve el número de filas afectadas.
Ejemplo
El siguiente ejemplo se basa en el modelo School y muestra el elemento InsertFunction que se utiliza para asignar la función de inserción de la asociación CourseInstructor al procedimiento almacenado InsertCourseInstructor. El procedimiento almacenado InsertCourseInstructor se declara en el modelo de almacenamiento.
El elemento Mapping del lenguaje de especificación de asignaciones (MSL) contiene información para asignar objetos definidos en un modelo conceptual a una base de datos (tal y como se describe en un modelo de almacenamiento). Para más información, consulte Especificación CSDL y Especificación SSDL.
El elemento Mapping es el elemento raíz para una especificación de asignaciones. El espacio de nombres XML para las especificaciones de asignaciones es https://schemas.microsoft.com/ado/2009/11/mapping/cs.
El elemento de asignación puede tener los elementos secundarios siguientes (en el orden mostrado):
Alias (cero o más)
EntityContainerMapping (exactamente uno)
Los nombres de los tipos de modelos conceptuales y de almacenamiento a los que se hace referencia en MSL deben estar calificados con sus respectivos nombres de espacios de nombres. Para más información sobre el nombre del espacio de nombres del modelo conceptual, consulte Schema (Elemento) (CSDL). Para más información sobre el nombre del espacio de nombres del modelo de almacenamiento, consulte Schema (Elemento) (SSDL). Los alias para los espacios de nombres que se utilizan en MSL se pueden definir con el elemento Alias.
Atributos aplicables
En la tabla siguiente se describen los atributos que se pueden aplicar al elemento Mapping.
Nombre del atributo
Es obligatorio
Valor
Espacio
Sí
C-S. Este es un valor fijo y no se puede cambiar.
Ejemplo
En el ejemplo siguiente se muestra un elemento Mapping basado en parte del modelo School. Para más información sobre el modelo School, consulte Inicio rápido: (Entity Framework):
El elemento MappingFragment del lenguaje de especificación de asignaciones (MSL) define la asignación entre las propiedades de un tipo de entidad del modelo conceptual y una tabla o vista de la base de datos. Para obtener información sobre los tipos de entidad del modelo conceptual y las tablas o vistas de la base de datos subyacente, consulte EntityType (Elemento) (CSDL) y EntitySet (Elemento) (SSDL). El elemento MappingFragment puede ser un elemento secundario del elemento EntityTypeMapping o el elemento EntitySetMapping.
El elemento MappingFragment puede tener los elementos secundarios siguientes:
ComplexType (cero o más)
ScalarProperty (cero o más)
Condition (cero o más)
Atributos aplicables
La siguiente tabla describe los atributos que pueden aplicarse al elemento MappingFragment.
Nombre del atributo
Es obligatorio
Valor
StoreEntitySet
Sí
El nombre de la tabla o vista que se está asociando.
MakeColumnsDistinct
No
True o False dependiendo de si solo se devuelven filas distintas. Si este atributo está establecido en True, el atributo GenerateUpdateViews del elemento EntityContainerMapping se debe establecer en False.
Ejemplo
En el ejemplo siguiente se muestra un elemento MappingFragment como elemento secundario de un elemento EntityTypeMapping. En este ejemplo, las propiedades del tipo Course en el modelo conceptual están asignadas a columnas de la tabla Course de la base de datos.
En el ejemplo siguiente se muestra un elemento MappingFragment como elemento secundario de un elemento EntitySetMapping. Como en el ejemplo anterior, las propiedades del tipo Course del modelo conceptual se asignan a columnas de la tabla Course de la base de datos.
El elemento ModificationFunctionMapping del lenguaje de especificación de asignaciones (MSL) asigna las funciones de inserción, actualización y eliminación de un tipo de entidad del modelo conceptual a procedimientos almacenados de la base de datos subyacente. El elemento ModificationFunctionMapping también puede asignar las funciones de eliminación e inserción para asociaciones de varios a varios del modelo conceptual a procedimientos almacenados de la base de datos subyacente. Los procedimientos almacenados a los que están asignados las funciones de modificación se deben declarar en el modelo de almacenamiento. Para obtener más información, vea Elementos de función (SSDL).
Nota
Si no asigna las tres operaciones de inserción, actualización o eliminación de un tipo de entidad a procedimientos almacenados, se producirá un error en las operaciones no asignadas al ejecutarlas y se producirá una excepción UpdateException.
Nota
Si las funciones de modificación para una entidad de una jerarquía de herencia están asignadas a procedimientos almacenados, entonces las funciones de modificación para todos los tipos de la jerarquía deben estar asignadas a procedimientos almacenados.
El elementoModificationFunctionMapping puede ser un elemento secundario del elemento EntityTypeMapping o el elemento AssociationSetMapping.
El elemento ModificationFunctionMapping puede tener los elementos secundarios siguientes:
DeleteFunction (cero o uno)
InsertFunction (cero o uno)
UpdateFunction (cero o uno)
No se aplica ningún atributo al elemento ModificationFunctionMapping.
Ejemplo
En el ejemplo siguiente se muestra la asignación de conjunto de entidades para el conjunto de entidades People del modelo School. Además de la asignación de columnas para el tipo de entidad Person, se muestra la asignación de las funciones de inserción, actualización y eliminación del tipo Person. Las funciones asignadas se declaran en el modelo de almacenamiento.
En el siguiente ejemplo se muestra la asignación del conjunto de asociaciones CourseInstructor en el modelo School. Además de la asignación de columnas para la asociación CourseInstructor, se muestra la asignación de las funciones de inserción y eliminación de la asociación CourseInstructor. Las funciones asignadas se declaran en el modelo de almacenamiento.
El elemento QueryView del lenguaje de especificación de asignaciones (MSL) define una asignación de solo lectura entre un tipo de entidad o asociación en el modelo conceptual y una tabla de la base de datos subyacente. La asignación se define con una consulta de Entity SQL que se evalúa contra el modelo de almacenamiento, mientras que el conjunto de resultados se expresa en relación a una entidad o asociación del modelo conceptual. Dado que las vistas de consulta son de solo lectura, no puede utilizar los comandos de actualización estándar para actualizar los tipos que se definen mediante vistas de consulta. Puede realizar las actualizaciones de estos tipos utilizando funciones de modificación. Para más información, consulte Asignación de funciones de modificación a procedimientos almacenados.
Nota
En el elemento QueryView, no se admiten expresiones de Entity SQL que contengan GroupBy, agregados de grupo o propiedades de navegación.
El elemento QueryView puede ser un elemento secundario del elemento EntitySetMapping o el elemento AssociationSetMapping. En el primer caso, la vista de consulta define una asignación de solo lectura para una entidad del modelo conceptual. En el último caso, la vista de consulta define una asignación de solo lectura para una asociación del modelo conceptual.
Nota
Si el elemento AssociationSetMapping está presente para una asociación con una restricción referencial, se omitirá el elemento AssociationSetMapping. Para más información, consulte Elemento ReferentialConstraint (CSDL).
El elemento QueryView no puede tener ningún elemento secundario.
Atributos aplicables
La siguiente tabla describe los atributos que pueden aplicarse al elemento QueryView.
Nombre del atributo
Es obligatorio
Valor
TypeName
No
El nombre del tipo de modelo conceptual que se está asignando mediante la vista de consulta.
Ejemplo
El siguiente ejemplo muestra el elemento QueryView como un elemento secundario del elemento EntitySetMapping y define una asignación de vista de consulta para el tipo de entidad Department del modelo School.
<EntitySetMapping Name="Departments" >
<QueryView>
SELECT VALUE SchoolModel.Department(d.DepartmentID,
d.Name,
d.Budget,
d.StartDate)
FROM SchoolModelStoreContainer.Department AS d
WHERE d.Budget > 150000
</QueryView>
</EntitySetMapping>
Dado que la consulta solo devuelve un subconjunto de los miembros del tipo Department en el modelo de almacenamiento, el tipo Department del modelo School se ha modificado según esta asignación de la forma siguiente:
El ejemplo siguiente muestra el elemento QueryView como el elemento secundario de un elemento AssociationSetMapping y define una asignación de solo lectura para la asociación FK_Course_Department en el modelo School.
<EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
CdmEntityContainer="SchoolEntities">
<EntitySetMapping Name="Courses" >
<QueryView>
SELECT VALUE SchoolModel.Course(c.CourseID,
c.Title,
c.Credits)
FROM SchoolModelStoreContainer.Course AS c
</QueryView>
</EntitySetMapping>
<EntitySetMapping Name="Departments" >
<QueryView>
SELECT VALUE SchoolModel.Department(d.DepartmentID,
d.Name,
d.Budget,
d.StartDate)
FROM SchoolModelStoreContainer.Department AS d
WHERE d.Budget > 150000
</QueryView>
</EntitySetMapping>
<AssociationSetMapping Name="FK_Course_Department" >
<QueryView>
SELECT VALUE SchoolModel.FK_Course_Department(
CREATEREF(SchoolEntities.Departments, row(c.DepartmentID), SchoolModel.Department),
CREATEREF(SchoolEntities.Courses, row(c.CourseID)) )
FROM SchoolModelStoreContainer.Course AS c
</QueryView>
</AssociationSetMapping>
</EntityContainerMapping>
Comentarios
Puede definir vistas de consulta para habilitar los escenarios siguientes:
Defina una entidad en el modelo conceptual que no incluya todas las propiedades de la entidad en el modelo de almacenamiento. Se incluyen las propiedades que no tienen valores predeterminados y no admiten valores null.
Asigne las columnas calculadas del modelo de almacenamiento a las propiedades de los tipos de entidad del modelo conceptual.
Defina una asignación en la que las condiciones utilizadas para dividir las entidades del modelo conceptual no se basen en la igualdad. Al especificar una asignación condicional mediante el elemento Condition, la condición proporcionada debe igualar el valor especificado. Para más información, consulte Elemento Condition (MSL).
Asigne la misma columna en el modelo de almacenamiento a varios tipos en el modelo conceptual.
Asigne varios tipos a la misma tabla.
Defina asociaciones en el modelo conceptual que no se basen en claves externas en el esquema relacional.
Utilice la lógica de negocios personalizada para establecer el valor de las propiedades del modelo conceptual. Por ejemplo, podría asignar el valor de cadena "T" en el origen de datos a un valor de true, un valor Boolean, en el modelo conceptual.
Defina filtros condicionales para los resultados de la consulta.
Aplique menos restricciones en los datos del modelo conceptual que en el modelo de almacenamiento. Por ejemplo, podría hacer que una propiedad del modelo conceptual acepte valores NULL aun cuando la columna a la que está asignada no admita valores null.
Las consideraciones siguientes se aplican al definir las vistas de consulta para las entidades:
Las vistas de consulta son de solo lectura. Solo puede realizar las actualizaciones a las entidades utilizando las funciones de modificación.
Al definir un tipo de entidad mediante una vista de consulta, también debe definir todas las entidades relacionadas mediante vistas de consulta.
Al asignar una asociación varios a varios a una entidad en el modelo de almacenamiento que representa una tabla de vínculos del esquema relacional, debe definir un elemento QueryView en el elemento AssociationSetMapping para esta tabla de vínculos.
Las vistas de consulta se deben definir para todos los tipos de una jerarquía de tipos. Puede hacerlo de las formas siguientes:
Con un elemento QueryView único que especifica una consulta de Entity SQL única que devuelve una unión de todos los tipos de entidad de la jerarquía.
Con un elemento QueryView único que especifica una consulta de Entity SQL única que utiliza al operador CASE para devolver un tipo de entidad concreto de la jerarquía según una condición concreta.
Con un elemento QueryView adicional para un tipo específico de la jerarquía. En este caso, utilice el atributo TypeName del elemento QueryView para especificar el tipo de entidad de cada vista.
Al definir una vista de consulta, no puede especificar el atributo StorageSetName en el elemento EntitySetMapping.
Al definir una vista de consulta, el elemento EntitySetMapping tampoco puede contener asignaciones Property.
ResultBinding (Elemento) (MSL)
El elemento ResultBinding del lenguaje de especificación de asignaciones (MSL) asigna valores de columnas devueltos por procedimientos almacenados a propiedades de entidad del modelo conceptual cuando las funciones de modificación de tipo de entidad están asignadas a procedimientos almacenados de la base de datos subyacente. Por ejemplo, cuando un procedimiento almacenado de inserción devuelve el valor de una columna de identidad, el elemento ResultBinding asigna el valor devuelto a una propiedad de tipo de entidad del modelo conceptual.
El elemento ResultBinding puede ser un elemento secundario del elemento InsertFunction o el elemento UpdateFunction.
El elemento ResultBinding no puede tener ningún elemento secundario.
Atributos aplicables
En la tabla siguiente se describen los atributos aplicables al elemento ResultBinding:
Nombre del atributo
Es obligatorio
Valor
Nombre
Sí
El nombre de la propiedad de entidad del modelo conceptual que se está asignando.
ColumnName
Sí
El nombre de la columna que se está asignando.
Ejemplo
El siguiente ejemplo se basa en el modelo School y muestra un elemento InsertFunction que se utiliza para asignar la función de inserción del tipo de entidad Person al procedimiento almacenado InsertPerson. (El procedimiento almacenado InsertPerson se muestra abajo y se declara en el modelo de almacenamiento). Se utiliza un elemento ResultBinding para asignar un valor de columna devuelto por el procedimiento almacenado (NewPersonID) a una propiedad de tipo de entidad (PersonID).
El siguiente código Transact-SQL describe el procedimiento almacenado InsertPerson:
CREATE PROCEDURE [dbo].[InsertPerson]
@LastName nvarchar(50),
@FirstName nvarchar(50),
@HireDate datetime,
@EnrollmentDate datetime
AS
INSERT INTO dbo.Person (LastName,
FirstName,
HireDate,
EnrollmentDate)
VALUES (@LastName,
@FirstName,
@HireDate,
@EnrollmentDate);
SELECT SCOPE_IDENTITY() as NewPersonID;
ResultMapping (Elemento) (MSL)
El elemento ResultMapping del lenguaje de especificación de asignaciones (MSL) define la asignación entre una importación de función del modelo conceptual y un procedimiento almacenado de la base de datos subyacente cuando se cumple lo siguiente:
La importación de función devuelve un tipo de entidad del modelo conceptual o un tipo complejo.
Los nombres de las columnas devueltas por el procedimiento almacenado no coinciden exactamente con los nombres de las propiedades del tipo de entidad o el tipo complejo.
De forma predeterminada, la asignación entre las columnas devueltas por un procedimiento almacenado y un tipo de entidad o un tipo complejo se basa en los nombres de las propiedades y de las columnas. Si los nombres de las columnas no coinciden exactamente con los nombres de las propiedades, debe utilizar el elemento ResultMapping para definir la asignación. Para obtener un ejemplo de la asignación predeterminada, consulte Elemento FunctionImportMapping (MSL).
El elemento ResultMapping es un elemento secundario del elemento FunctionImportMapping.
El elemento ResultMapping puede tener los elementos secundarios siguientes:
EntityTypeMapping (cero o más)
ComplexTypeMapping
No se aplica ningún atributo al elemento ResultMapping.
Ejemplo
Observe el siguiente procedimiento almacenado:
CREATE PROCEDURE [dbo].[GetGrades]
@student_Id int
AS
SELECT EnrollmentID as enroll_id,
Grade as grade,
CourseID as course_id,
StudentID as student_id
FROM dbo.StudentGrade
WHERE StudentID = @student_Id
Considere también el siguiente tipo de entidad del modelo conceptual:
Para crear una importación de función que devuelva instancias del tipo de entidad anterior, la asignación entre las columnas devueltas por el procedimiento almacenado y el tipo de entidad se debe definir en un elemento ResultMapping:
El elemento ScalarProperty del lenguaje de especificación de asignaciones (MSL) asigna una propiedad de un tipo de entidad del modelo conceptual, un tipo complejo, o una asociación, a una columna de una tabla o un parámetro de un procedimiento almacenado de la base de datos subyacente.
Nota
Los procedimientos almacenados a los que están asignados las funciones de modificación se deben declarar en el modelo de almacenamiento. Para obtener más información, vea Elementos de función (SSDL).
El elemento ScalarProperty puede ser un elemento secundario de los elementos siguientes:
MappingFragment
InsertFunction
UpdateFunction
DeleteFunction
EndProperty
ComplexProperty
ResultMapping
Como elemento secundario del elemento MappingFragment, ComplexProperty o EndProperty, el elemento ScalarProperty asigna una propiedad del modelo conceptual a una columna de la base de datos. Como elemento secundario del elemento InsertFunction, UpdateFunction o DeleteFunction, el elemento ScalarProperty asigna una propiedad del modelo conceptual a un parámetro de procedimiento almacenado.
El elemento ScalarProperty no puede tener ningún elemento secundario.
Atributos aplicables
Los atributos que se aplican al elemento ScalarProperty difieren dependiendo del rol del elemento.
La siguiente tabla describe los atributos aplicables cuando el elemento ScalarProperty se utiliza para asignar una propiedad del modelo conceptual a una columna de la base de datos:
Nombre del atributo
Es obligatorio
Valor
Nombre
Sí
El nombre de la propiedad del modelo conceptual que se está asignando.
ColumnName
Sí
El nombre de la columna de tabla que se está asociando.
La siguiente tabla describe los atributos aplicables al elemento ScalarProperty cuando se utiliza para asignar una propiedad del modelo conceptual a un parámetro de procedimiento almacenado:
Nombre del atributo
Es obligatorio
Valor
Nombre
Sí
El nombre de la propiedad del modelo conceptual que se está asignando.
NombreDelParámetro
Sí
El nombre del parámetro que se está asignando.
Versión
No
Current u Original, dependiendo de si se debe utilizar el valor actual o el valor original de la propiedad para las comprobaciones de simultaneidad.
Ejemplo
En el siguiente ejemplo se muestra el elemento ScalarProperty utilizado de dos maneras:
Para asignar las propiedades del tipo de entidad Person a las columnas de la tabla Person.
Para asignar las propiedades del tipo de entidad Person a los parámetros del procedimiento almacenado UpdatePerson. Los procedimientos almacenados se declaran en el modelo de almacenamiento.
El ejemplo siguiente muestra el elemento ScalarProperty utilizado para asignar las funciones de eliminación e inserción de una asociación del modelo conceptual a procedimientos almacenados de la base de datos. Los procedimientos almacenados se declaran en el modelo de almacenamiento.
El elemento UpdateFunction del lenguaje de especificación de asignaciones (MSL) asigna la función de actualización de un tipo de entidad del modelo conceptual a un procedimiento almacenado de la base de datos subyacente. Los procedimientos almacenados a los que están asignados las funciones de modificación se deben declarar en el modelo de almacenamiento. Para obtener más información, vea Elementos de función (SSDL).
Nota
Si no asigna las tres operaciones de inserción, actualización o eliminación de un tipo de entidad a procedimientos almacenados, se producirá un error en las operaciones no asignadas al ejecutarlas y se producirá una excepción UpdateException.
El elemento UpdateFunction puede ser un elemento secundario del elemento ModificationFunctionMapping y aplicarse al elemento EntityTypeMapping.
El elemento UpdateFunction puede tener los elementos secundarios siguientes:
AssociationEnd (cero o más)
ComplexProperty (cero o más)
ResultBinding (cero o uno)
ScalarProperty (cero o más)
Atributos aplicables
La siguiente tabla describe los atributos que pueden aplicarse al elemento UpdateFunction.
Nombre del atributo
Es obligatorio
Valor
FunctionName
Sí
El nombre completo, calificado con el espacio de nombres, del procedimiento almacenado al que la función de actualización está asignada. El procedimiento almacenado se debe declarar en el modelo de almacenamiento.
RowsAffectedParameter
No
El nombre del parámetro de salida que devuelve el número de filas afectadas.
Ejemplo
El siguiente ejemplo se basa en el modelo School y muestra el elemento UpdateFunction que se utiliza para asignar la función de actualización del tipo de entidad Person al procedimiento almacenado UpdatePerson. El procedimiento almacenado UpdatePerson se declara en el modelo de almacenamiento.
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.
Comentarios de .NET
.NET es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
¿Desea obtener información acerca de los tipos de tablas en Business Central? En este módulo, aprenderá sobre los diferentes tipos de tablas funcionales y sus características específicas, como campos especiales, propiedades y páginas vinculadas.