Especificação de MSLMSL Specification

O MSL (Mapping Specification Language) é uma linguagem baseada em XML que descreve o mapeamento entre o modelo conceitual e o modelo de armazenamento de um aplicativo Entity Framework.Mapping specification language (MSL) is an XML-based language that describes the mapping between the conceptual model and storage model of an Entity Framework application.

Em um aplicativo Entity Framework, os metadados de mapeamento são carregados de um arquivo. MSL (escrito em MSL) no momento da compilação.In an Entity Framework application, mapping metadata is loaded from an .msl file (written in MSL) at build time. O Entity Framework usa metadados de mapeamento em tempo de execução para converter consultas em relação ao modelo conceitual para armazenar comandos específicos.Entity Framework uses mapping metadata at runtime to translate queries against the conceptual model to store-specific commands.

O Entity Framework Designer (EF designer) armazena informações de mapeamento em um arquivo. edmx em tempo de design.The Entity Framework Designer (EF Designer) stores mapping information in an .edmx file at design time. No momento da compilação, o Entity Designer usa informações em um arquivo. edmx para criar o arquivo. MSL que é necessário pelo Entity Framework em tempo de execuçãoAt build time, the Entity Designer uses information in an .edmx file to create the .msl file that is needed by Entity Framework at runtime

Os nomes de todos os tipos de modelo conceituais ou de armazenamento referenciados no MSL devem ser qualificados por seus respectivos nomes de namespace.Names of all conceptual or storage model types that are referenced in MSL must be qualified by their respective namespace names. Para obter informações sobre o nome do namespace do modelo conceitual, consulte especificação CSDL.For information about the conceptual model namespace name, see CSDL Specification. Para obter informações sobre o nome do namespace do modelo de armazenamento, consulte especificação de SSDL.For information about the storage model namespace name, see SSDL Specification.

As versões do MSL são diferenciadas por namespaces XML.Versions of MSL are differentiated by XML namespaces.

Versão do MSLMSL Version Namespace XMLXML Namespace
MSL v1MSL v1 urn: schemas-microsoft-com: Windows: Storage: Mapping: CSurn:schemas-microsoft-com:windows:storage:mapping:CS
MSL v2MSL v2 https://schemas.microsoft.com/ado/2008/09/mapping/cs
MSL v3MSL v3 https://schemas.microsoft.com/ado/2009/11/mapping/cs

Elemento alias (MSL)Alias Element (MSL)

O elemento alias no MSL (Mapping Specification Language) é um filho do elemento Mapping que é usado para definir aliases para namespaces de modelo conceitual e modelo de armazenamento.The Alias element in mapping specification language (MSL) is a child of the Mapping element that is used to define aliases for conceptual model and storage model namespaces. Os nomes de todos os tipos de modelo conceituais ou de armazenamento referenciados no MSL devem ser qualificados por seus respectivos nomes de namespace.Names of all conceptual or storage model types that are referenced in MSL must be qualified by their respective namespace names. Para obter informações sobre o nome do namespace do modelo conceitual, consulte elemento Schema (CSDL).For information about the conceptual model namespace name, see Schema Element (CSDL). Para obter informações sobre o nome do namespace do modelo de armazenamento, consulte elemento de esquema (SSDL).For information about the storage model namespace name, see Schema Element (SSDL).

O elemento alias não pode ter elementos filho.The Alias element cannot have child elements.

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento alias .The table below describes the attributes that can be applied to the Alias element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
ChaveKey SimYes O alias para o namespace que é especificado pelo atributo Value .The alias for the namespace that is specified by the Value attribute.
ValorValue SimYes O namespace para o qual o valor do elemento de chave é um alias.The namespace for which the value of the Key element is an alias.

ExemploExample

O exemplo a seguir mostra um elemento alias que define um alias, c , para tipos que são definidos no modelo conceitual.The following example shows an Alias element that defines an alias, c, for types that are defined in the conceptual model.

 <Mapping Space="C-S"
          xmlns="https://schemas.microsoft.com/ado/2009/11/mapping/cs">
   <Alias Key="c" Value="SchoolModel"/>
   <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
                           CdmEntityContainer="SchoolModelEntities">
     <EntitySetMapping Name="Courses">
       <EntityTypeMapping TypeName="c.Course">
         <MappingFragment StoreEntitySet="Course">
           <ScalarProperty Name="CourseID" ColumnName="CourseID" />
           <ScalarProperty Name="Title" ColumnName="Title" />
           <ScalarProperty Name="Credits" ColumnName="Credits" />
           <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
         </MappingFragment>
       </EntityTypeMapping>
     </EntitySetMapping>
     <EntitySetMapping Name="Departments">
       <EntityTypeMapping TypeName="c.Department">
         <MappingFragment StoreEntitySet="Department">
           <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
           <ScalarProperty Name="Name" ColumnName="Name" />
           <ScalarProperty Name="Budget" ColumnName="Budget" />
           <ScalarProperty Name="StartDate" ColumnName="StartDate" />
           <ScalarProperty Name="Administrator" ColumnName="Administrator" />
         </MappingFragment>
       </EntityTypeMapping>
     </EntitySetMapping>
   </EntityContainerMapping>
 </Mapping>

Elemento AssociationEnd (MSL)AssociationEnd Element (MSL)

O elemento AssociationEnd na MSL (linguagem de especificação de mapeamento) é usado quando as funções de modificação de um tipo de entidade no modelo conceitual são mapeadas para procedimentos armazenados no banco de dados subjacente.The AssociationEnd element in mapping specification language (MSL) is used when the modification functions of an entity type in the conceptual model are mapped to stored procedures in the underlying database. Se um procedimento armazenado de modificação usa um parâmetro cujo valor é mantido em uma propriedade de associação, o elemento AssociationEnd mapeia o valor da propriedade para o parâmetro.If a modification stored procedure takes a parameter whose value is held in an association property, the AssociationEnd element maps the property value to the parameter. Para obter mais informações, consulte o exemplo a seguir.For more information, see the example below.

Para obter mais informações sobre como mapear funções de modificação de tipos de entidade para procedimentos armazenados, consulte ModificationFunctionMapping Element (MSL) e Walkthrough: Mappinging a Entity to stored procedures.For more information about mapping modification functions of entity types to stored procedures, see ModificationFunctionMapping Element (MSL) and Walkthrough: Mapping an Entity to Stored Procedures.

O elemento AssociationEnd pode ter os seguintes elementos filho:The AssociationEnd element can have the following child elements:

  • ScalarPropertyScalarProperty

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que são aplicáveis ao elemento AssociationEnd .The following table describes the attributes that are applicable to the AssociationEnd element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
AssociationSetAssociationSet SimYes O nome da associação que está sendo mapeada.The name of the association that is being mapped.
DeFrom SimYes O valor do atributo FromRole da propriedade de navegação que corresponde à associação que está sendo mapeada.The value of the FromRole attribute of the navigation property that corresponds to the association being mapped. Para obter mais informações, consulte o elemento NavigationProperty (CSDL).For more information, see NavigationProperty Element (CSDL).
ParaTo SimYes O valor do atributo ToRole da propriedade de navegação que corresponde à associação que está sendo mapeada.The value of the ToRole attribute of the navigation property that corresponds to the association being mapped. Para obter mais informações, consulte o elemento NavigationProperty (CSDL).For more information, see NavigationProperty Element (CSDL).

ExemploExample

Considere o seguinte tipo de entidade de modelo conceitual:Consider the following conceptual model entity type:

 <EntityType Name="Course">
   <Key>
     <PropertyRef Name="CourseID" />
   </Key>
   <Property Type="Int32" Name="CourseID" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" MaxLength="100"
             FixedLength="false" Unicode="true" />
   <Property Type="Int32" Name="Credits" Nullable="false" />
   <NavigationProperty Name="Department"
                       Relationship="SchoolModel.FK_Course_Department"
                       FromRole="Course" ToRole="Department" />
 </EntityType>

Considere também o seguinte procedimento armazenado:Also consider the following stored procedure:

 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 mapear a função Update da Course entidade para esse procedimento armazenado, você deve fornecer um valor para o parâmetro DepartmentID .In order to map the update function of the Course entity to this stored procedure, you must supply a value to the DepartmentID parameter. O valor de não DepartmentID corresponde a uma propriedade no tipo de entidade; ele está contido em uma associação independente cujo mapeamento é mostrado aqui:The value for DepartmentID does not correspond to a property on the entity type; it is contained in an independent association whose mapping is shown here:

 <AssociationSetMapping Name="FK_Course_Department"
                        TypeName="SchoolModel.FK_Course_Department"
                        StoreEntitySet="Course">
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <EndProperty Name="Department">
     <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
   </EndProperty>
 </AssociationSetMapping>

O código a seguir mostra o elemento AssociationEnd usado para mapear a propriedade DepartmentID da Associação de ** _ _ Departamento do curso FK** para o procedimento armazenado UpdateCourse (para o qual a função Update do tipo de entidade curso é mapeada):The following code shows the AssociationEnd element used to map the DepartmentID property of the FK_Course_Department association to the UpdateCourse stored procedure (to which the update function of the Course entity type is mapped):

 <EntitySetMapping Name="Courses">
   <EntityTypeMapping TypeName="SchoolModel.Course">
     <MappingFragment StoreEntitySet="Course">
       <ScalarProperty Name="Credits" ColumnName="Credits" />
       <ScalarProperty Name="Title" ColumnName="Title" />
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Course">
     <ModificationFunctionMapping>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdateCourse">
         <AssociationEnd AssociationSet="FK_Course_Department"
                         From="Course" To="Department">
           <ScalarProperty Name="DepartmentID"
                           ParameterName="DepartmentID"
                           Version="Current" />
         </AssociationEnd>
         <ScalarProperty Name="Credits" ParameterName="Credits"
                         Version="Current" />
         <ScalarProperty Name="Title" ParameterName="Title"
                         Version="Current" />
         <ScalarProperty Name="CourseID" ParameterName="CourseID"
                         Version="Current" />
       </UpdateFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

Elemento AssociationSetMapping (MSL)AssociationSetMapping Element (MSL)

O elemento AssociationSetMapping na MSL (linguagem de especificação de mapeamento) define o mapeamento entre uma associação no modelo conceitual e colunas de tabela no banco de dados subjacente.The AssociationSetMapping element in mapping specification language (MSL) defines the mapping between an association in the conceptual model and table columns in the underlying database.

As associações no modelo conceitual são tipos cujas propriedades representam as colunas de chave primária e estrangeira no banco de dados subjacente.Associations in the conceptual model are types whose properties represent primary and foreign key columns in the underlying database. O elemento AssociationSetMapping usa dois elementos EndProperty para definir os mapeamentos entre as propriedades e as colunas do tipo de associação no banco de dados.The AssociationSetMapping element uses two EndProperty elements to define the mappings between association type properties and columns in the database. Você pode posicionar as condições nesses mapeamentos com o elemento Condition.You can place conditions on these mappings with the Condition element. Mapeie as funções INSERT, Update e Delete para associações a procedimentos armazenados no banco de dados com o elemento ModificationFunctionMapping.Map the insert, update, and delete functions for associations to stored procedures in the database with the ModificationFunctionMapping element. Defina mapeamentos somente leitura entre associações e colunas de tabela usando uma Entity SQL cadeia de caracteres em um elemento QueryView.Define read-only mappings between associations and table columns by using an Entity SQL string in a QueryView element.

Observação

Se uma restrição referencial for definida para uma associação no modelo conceitual, a associação não precisará ser mapeada com um elemento AssociationSetMapping .If a referential constraint is defined for an association in the conceptual model, the association does not need to be mapped with an AssociationSetMapping element. Se um elemento AssociationSetMapping estiver presente para uma associação que tenha uma restrição referencial, os mapeamentos definidos no elemento AssociationSetMapping serão ignorados.If an AssociationSetMapping element is present for an association that has a referential constraint, the mappings defined in the AssociationSetMapping element will be ignored. Para obter mais informações, consulte elemento ReferentialConstraint (CSDL).For more information, see ReferentialConstraint Element (CSDL).

O elemento AssociationSetMapping pode ter os seguintes elementos filhoThe AssociationSetMapping element can have the following child elements

  • QueryView (zero ou um)QueryView (zero or one)
  • EndProperty (zero ou dois)EndProperty (zero or two)
  • Condição (zero ou mais)Condition (zero or more)
  • ModificationFunctionMapping (zero ou um)ModificationFunctionMapping (zero or one)

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento AssociationSetMapping .The following table describes the attributes that can be applied to the AssociationSetMapping element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
NomeName SimYes O nome do conjunto de associação do modelo conceitual que está sendo mapeado.The name of the conceptual model association set that is being mapped.
TypeNameTypeName NãoNo O nome qualificado do namespace do tipo de associação de modelo conceitual que está sendo mapeado.The namespace-qualified name of the conceptual model association type that is being mapped.
StoreEntitySetStoreEntitySet NãoNo O nome da tabela que está sendo mapeada.The name of the table that is being mapped.

ExemploExample

O exemplo a seguir mostra um elemento AssociationSetMapping no qual a associação do Departamento do _ curso _ de FK definida no modelo conceitual é mapeada para a tabela do curso no banco de dados.The following example shows an AssociationSetMapping element in which the FK_Course_Department association set in the conceptual model is mapped to the Course table in the database. Os mapeamentos entre as propriedades do tipo de associação e as colunas de tabela são especificados nos elementos filho EndProperty .Mappings between association type properties and table columns are specified in child EndProperty elements.

 <AssociationSetMapping Name="FK_Course_Department"
                        TypeName="SchoolModel.FK_Course_Department"
                        StoreEntitySet="Course">
   <EndProperty Name="Department">
     <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
 </AssociationSetMapping>

Elemento ComplexProperty (MSL)ComplexProperty Element (MSL)

Um elemento ComplexProperty na MSL (linguagem de especificação de mapeamento) define o mapeamento entre uma propriedade de tipo complexo em um tipo de entidade de modelo conceitual e colunas de tabela no banco de dados subjacente.A ComplexProperty element in mapping specification language (MSL) defines the mapping between a complex type property on a conceptual model entity type and table columns in the underlying database. Os mapeamentos de coluna de propriedade são especificados em elementos ScalarProperty filho.The property-column mappings are specified in child ScalarProperty elements.

O elemento de propriedade complexType pode ter os seguintes elementos filho:The ComplexType property element can have the following child elements:

  • ScalarProperty (zero ou mais)ScalarProperty (zero or more)
  • ComplexProperty (zero ou mais)ComplexProperty (zero or more)
  • ComplextTypeMapping (zero ou mais)ComplextTypeMapping (zero or more)
  • Condição (zero ou mais)Condition (zero or more)

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que são aplicáveis ao elemento ComplexProperty :The following table describes the attributes that are applicable to the ComplexProperty element:

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
NomeName SimYes O nome da propriedade complexa de um tipo de entidade no modelo conceitual que está sendo mapeado.The name of the complex property of an entity type in the conceptual model that is being mapped.
TypeNameTypeName NãoNo O nome qualificado do namespace do tipo de Propriedade do modelo conceitual.The namespace-qualified name of the conceptual model property type.

ExemploExample

O exemplo a seguir é baseado no modelo escolar.The following example is based on the School model. O seguinte tipo complexo foi adicionado ao modelo conceitual:The following complex type has been added to the conceptual model:

 <ComplexType Name="FullName">
   <Property Type="String" Name="LastName"
             Nullable="false" MaxLength="50"
             FixedLength="false" Unicode="true" />
   <Property Type="String" Name="FirstName"
             Nullable="false" MaxLength="50"
             FixedLength="false" Unicode="true" />
 </ComplexType>

As propriedades LastName e FirstName do tipo de entidade Person foram substituídas por uma propriedade complexa, Name:The LastName and FirstName properties of the Person entity type have been replaced with one complex property, Name:

 <EntityType Name="Person">
   <Key>
     <PropertyRef Name="PersonID" />
   </Key>
   <Property Name="PersonID" Type="Int32" Nullable="false"
             annotation:StoreGeneratedPattern="Identity" />
   <Property Name="HireDate" Type="DateTime" />
   <Property Name="EnrollmentDate" Type="DateTime" />
   <Property Name="Name" Type="SchoolModel.FullName" Nullable="false" />
 </EntityType>

O seguinte MSL mostra o elemento ComplexProperty usado para mapear a propriedade Name para colunas no banco de dados subjacente:The following MSL shows the ComplexProperty element used to map the Name property to columns in the underlying database:

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate" ColumnName="EnrollmentDate" />
       <ComplexProperty Name="Name" TypeName="SchoolModel.FullName">
         <ScalarProperty Name="FirstName" ColumnName="FirstName" />
         <ScalarProperty Name="LastName" ColumnName="LastName" />  
       </ComplexProperty>
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

Elemento ComplexTypeMapping (MSL)ComplexTypeMapping Element (MSL)

O elemento ComplexTypeMapping na MSL (linguagem de especificação de mapeamento) é um filho do elemento ResultMapping e define o mapeamento entre uma importação de função no modelo conceitual e um procedimento armazenado no banco de dados subjacente quando o seguinte é verdadeiro:The ComplexTypeMapping element in mapping specification language (MSL) is a child of the ResultMapping element and defines the mapping between a function import in the conceptual model and a stored procedure in the underlying database when the following are true:

  • A função Import retorna um tipo complexo conceitual.The function import returns a conceptual complex type.
  • Os nomes das colunas retornadas pelo procedimento armazenado não correspondem exatamente aos nomes das propriedades no tipo complexo.The names of the columns returned by the stored procedure do not exactly match the names of the properties on the complex type.

Por padrão, o mapeamento entre as colunas retornadas por um procedimento armazenado e um tipo complexo baseia-se nos nomes de coluna e propriedade.By default, the mapping between the columns returned by a stored procedure and a complex type is based on column and property names. Se os nomes de coluna não corresponderem exatamente aos nomes de propriedade, você deverá usar o elemento ComplexTypeMapping para definir o mapeamento.If column names do not exactly match property names, you must use the ComplexTypeMapping element to define the mapping. Para obter um exemplo do mapeamento padrão, consulte elemento FunctionImportMapping (MSL).For an example of the default mapping, see FunctionImportMapping Element (MSL).

O elemento ComplexTypeMapping pode ter os seguintes elementos filho:The ComplexTypeMapping element can have the following child elements:

  • ScalarProperty (zero ou mais)ScalarProperty (zero or more)

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que são aplicáveis ao elemento ComplexTypeMapping .The following table describes the attributes that are applicable to the ComplexTypeMapping element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
TypeNameTypeName SimYes O nome qualificado do namespace do tipo complexo que está sendo mapeado.The namespace-qualified name of the complex type that is being mapped.

ExemploExample

Considere o seguinte procedimento armazenado:Consider the following stored procedure:

 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 também o seguinte tipo complexo de modelo conceitual:Also consider the following conceptual model complex type:

 <ComplexType Name="GradeInfo">
   <Property Type="Int32" Name="EnrollmentID" Nullable="false" />
   <Property Type="Decimal" Name="Grade" Nullable="true"
             Precision="3" Scale="2" />
   <Property Type="Int32" Name="CourseID" Nullable="false" />
   <Property Type="Int32" Name="StudentID" Nullable="false" />
 </ComplexType>

Para criar uma importação de função que retorne instâncias do tipo complexo anterior, o mapeamento entre as colunas retornadas pelo procedimento armazenado e o tipo de entidade deve ser definido em um elemento ComplexTypeMapping :In order to create a function import that returns instances of the previous complex type, the mapping between the columns returned by the stored procedure and the entity type must be defined in a ComplexTypeMapping element:

 <FunctionImportMapping FunctionImportName="GetGrades"
                        FunctionName="SchoolModel.Store.GetGrades" >
   <ResultMapping>
     <ComplexTypeMapping TypeName="SchoolModel.GradeInfo">
       <ScalarProperty Name="EnrollmentID" ColumnName="enroll_id"/>
       <ScalarProperty Name="CourseID" ColumnName="course_id"/>
       <ScalarProperty Name="StudentID" ColumnName="student_id"/>
       <ScalarProperty Name="Grade" ColumnName="grade"/>
     </ComplexTypeMapping>
   </ResultMapping>
 </FunctionImportMapping>

Elemento Condition (MSL)Condition Element (MSL)

O elemento Condition no MSL (Mapping Specification Language) coloca condições em mapeamentos entre o modelo conceitual e o banco de dados subjacente.The Condition element in mapping specification language (MSL) places conditions on mappings between the conceptual model and the underlying database. O mapeamento definido dentro de um nó XML será válido se todas as condições, conforme especificado nos elementos de condição filho, forem atendidas.The mapping that is defined within an XML node is valid if all conditions, as specified in child Condition elements, are met. Caso contrário, o mapeamento não será válido.Otherwise, the mapping is not valid. Por exemplo, se um elemento MappingFragment contiver um ou mais elementos filho Condition , o mapeamento definido no nó MappingFragment só será válido se todas as condições dos elementos de condição filho forem atendidas.For example, if a MappingFragment element contains one or more Condition child elements, the mapping defined within the MappingFragment node will only be valid if all the conditions of the child Condition elements are met.

Cada condição pode se aplicar a um nome (o nome de uma propriedade de entidade modelo conceitual, especificada pelo atributo Name ) ou um ColumnName (o nome de uma coluna no banco de dados, especificado pelo atributo ColumnName ).Each condition can apply to either a Name (the name of a conceptual model entity property, specified by the Name attribute), or a ColumnName (the name of a column in the database, specified by the ColumnName attribute). Quando o atributo Name é definido, a condição é verificada em relação a um valor de propriedade de entidade.When the Name attribute is set, the condition is checked against an entity property value. Quando o atributo ColumnName é definido, a condição é verificada em relação a um valor de coluna.When the ColumnName attribute is set, the condition is checked against a column value. Somente um dos atributos Name ou ColumnName pode ser especificado em um elemento Condition .Only one of the Name or ColumnName attribute can be specified in a Condition element.

Observação

Quando o elemento Condition é usado em um elemento FunctionImportMapping, somente o atributo Name não é aplicável.When the Condition element is used within a FunctionImportMapping element, only the Name attribute is not applicable.

O elemento Condition pode ser um filho dos seguintes elementos:The Condition element can be a child of the following elements:

  • AssociationSetMappingAssociationSetMapping
  • ComplexPropertyComplexProperty
  • EntitySetMappingEntitySetMapping
  • MappingFragmentMappingFragment
  • EntityTypeMappingEntityTypeMapping

O elemento Condition não pode ter nenhum elemento filho.The Condition element can have no child elements.

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que são aplicáveis ao elemento Condition :The following table describes the attributes that are applicable to the Condition element:

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
ColumnNameColumnName NãoNo O nome da coluna de tabela cujo valor é usado para avaliar a condição.The name of the table column whose value is used to evaluate the condition.
IsNullIsNull NãoNo True ou false.True or False. Se o valor for true e o valor da coluna for NULLou se o valor for false e o valor da coluna não for NULL, a condição será true.If the value is True and the column value is null, or if the value is False and the column value is not null, the condition is true. Caso contrário, a condição será falsa.Otherwise, the condition is false.
Os atributos IsNull e Value não podem ser usados ao mesmo tempo.The IsNull and Value attributes cannot be used at the same time.
ValorValue NãoNo O valor com o qual o valor da coluna é comparado.The value with which the column value is compared. Se os valores forem iguais, a condição será verdadeira.If the values are the same, the condition is true. Caso contrário, a condição será falsa.Otherwise, the condition is false.
Os atributos IsNull e Value não podem ser usados ao mesmo tempo.The IsNull and Value attributes cannot be used at the same time.
NomeName NãoNo O nome da propriedade de entidade do modelo conceitual cujo valor é usado para avaliar a condição.The name of the conceptual model entity property whose value is used to evaluate the condition.
Esse atributo não será aplicável se o elemento Condition for usado dentro de um elemento FunctionImportMapping.This attribute is not applicable if the Condition element is used within a FunctionImportMapping element.

ExemploExample

O exemplo a seguir mostra os elementos Condition como filhos dos elementos MappingFragment .The following example shows Condition elements as children of MappingFragment elements. Quando HireDate não é nulo e EnrollmentDate é nulo, os dados são mapeados entre o tipo SchoolModel. instrutor e as colunas PersonID e HireDate da tabela Person .When HireDate is not null and EnrollmentDate is null, data is mapped between the SchoolModel.Instructor type and the PersonID and HireDate columns of the Person table. Quando EnrollmentDate não é nulo e HireDate é NULL, os dados são mapeados entre o tipo SchoolModel. Student e as colunas PersonID e registro da tabela Person .When EnrollmentDate is not null and HireDate is null, data is mapped between the SchoolModel.Student type and the PersonID and Enrollment columns of the Person table.

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Person)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Instructor)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <Condition ColumnName="HireDate" IsNull="false" />
       <Condition ColumnName="EnrollmentDate" IsNull="true" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Student)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
       <Condition ColumnName="EnrollmentDate" IsNull="false" />
       <Condition ColumnName="HireDate" IsNull="true" />
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

Elemento DeleteFunction (MSL)DeleteFunction Element (MSL)

O elemento DeleteFunction na MSL (linguagem de especificação de mapeamento) mapeia a função Delete de um tipo de entidade ou associação no modelo conceitual para um procedimento armazenado no banco de dados subjacente.The DeleteFunction element in mapping specification language (MSL) maps the delete function of an entity type or association in the conceptual model to a stored procedure in the underlying database. Os procedimentos armazenados para os quais as funções de modificação são mapeadas devem ser declarados no modelo de armazenamento.Stored procedures to which modification functions are mapped must be declared in the storage model. Para obter mais informações, consulte elemento Function (SSDL).For more information, see Function Element (SSDL).

Observação

Se você não mapear todas as três das operações de inserção, atualização ou exclusão de um tipo de entidade para procedimentos armazenados, as operações não mapeadas falharão se executadas em tempo de execução e uma UpdateException for gerada.If you do not map all three of the insert, update, or delete operations of a entity type to stored procedures, the unmapped operations will fail if executed at runtime and an UpdateException is thrown.

DeleteFunction aplicado a EntityTypeMappingDeleteFunction Applied to EntityTypeMapping

Quando aplicado ao elemento EntityTypeMapping, o elemento DeleteFunction mapeia a função Delete de um tipo de entidade no modelo conceitual para um procedimento armazenado.When applied to the EntityTypeMapping element, the DeleteFunction element maps the delete function of an entity type in the conceptual model to a stored procedure.

O elemento DeleteFunction pode ter os seguintes elementos filho quando aplicados a um elemento EntityTypeMapping :The DeleteFunction element can have the following child elements when applied to an EntityTypeMapping element:

  • AssociationEnd (zero ou mais)AssociationEnd (zero or more)
  • ComplexProperty (zero ou mais)ComplexProperty (zero or more)
  • ScarlarProperty (zero ou mais)ScarlarProperty (zero or more)

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento DeleteFunction quando ele é aplicado a um elemento EntityTypeMapping .The following table describes the attributes that can be applied to the DeleteFunction element when it is applied to an EntityTypeMapping element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
FunctionNameFunctionName SimYes O nome qualificado do namespace do procedimento armazenado para o qual a função Delete está mapeada.The namespace-qualified name of the stored procedure to which the delete function is mapped. O procedimento armazenado deve ser declarado no modelo de armazenamento.The stored procedure must be declared in the storage model.
RowsAffectedParameterRowsAffectedParameter NãoNo O nome do parâmetro de saída que retorna o número de linhas afetadas.The name of the output parameter that returns the number of rows affected.

ExemploExample

O exemplo a seguir é baseado no modelo escolar e mostra o elemento DeleteFunction mapeando a função Delete do tipo de entidade Person para o procedimento armazenado DeletePerson .The following example is based on the School model and shows the DeleteFunction element mapping the delete function of the Person entity type to the DeletePerson stored procedure. O procedimento armazenado DeletePerson é declarado no modelo de armazenamento.The DeletePerson stored procedure is declared in the storage model.

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
     </MappingFragment>
 </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <ModificationFunctionMapping>
       <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName" />
         <ScalarProperty Name="LastName" ParameterName="LastName" />
         <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
       </InsertFunction>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate"
                         Version="Current" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate"
                         Version="Current" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName"
                         Version="Current" />
         <ScalarProperty Name="LastName" ParameterName="LastName"
                         Version="Current" />
         <ScalarProperty Name="PersonID" ParameterName="PersonID"
                         Version="Current" />
       </UpdateFunction>
       <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
         <ScalarProperty Name="PersonID" ParameterName="PersonID" />
       </DeleteFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

DeleteFunction aplicado a AssociationSetMappingDeleteFunction Applied to AssociationSetMapping

Quando aplicado ao elemento AssociationSetMapping, o elemento DeleteFunction mapeia a função Delete de uma associação no modelo conceitual para um procedimento armazenado.When applied to the AssociationSetMapping element, the DeleteFunction element maps the delete function of an association in the conceptual model to a stored procedure.

O elemento DeleteFunction pode ter os seguintes elementos filho quando aplicado ao elemento AssociationSetMapping :The DeleteFunction element can have the following child elements when applied to the AssociationSetMapping element:

  • EndPropertyEndProperty

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento DeleteFunction quando ele é aplicado ao elemento AssociationSetMapping .The following table describes the attributes that can be applied to the DeleteFunction element when it is applied to the AssociationSetMapping element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
FunctionNameFunctionName SimYes O nome qualificado do namespace do procedimento armazenado para o qual a função Delete está mapeada.The namespace-qualified name of the stored procedure to which the delete function is mapped. O procedimento armazenado deve ser declarado no modelo de armazenamento.The stored procedure must be declared in the storage model.
RowsAffectedParameterRowsAffectedParameter NãoNo O nome do parâmetro de saída que retorna o número de linhas afetadas.The name of the output parameter that returns the number of rows affected.

ExemploExample

O exemplo a seguir é baseado no modelo escolar e mostra o elemento DeleteFunction usado para mapear a função Delete da Associação CourseInstructor para o procedimento armazenado DeleteCourseInstructor .The following example is based on the School model and shows the DeleteFunction element used to map delete function of the CourseInstructor association to the DeleteCourseInstructor stored procedure. O procedimento armazenado DeleteCourseInstructor é declarado no modelo de armazenamento.The DeleteCourseInstructor stored procedure is declared in the storage model.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

Elemento EndProperty (MSL)EndProperty Element (MSL)

O elemento EndProperty na MSL (linguagem de especificação de mapeamento) define o mapeamento entre uma função End ou uma modificação de uma associação de modelo conceitual e o banco de dados subjacente.The EndProperty element in mapping specification language (MSL) defines the mapping between an end or a modification function of a conceptual model association and the underlying database. O mapeamento de coluna de propriedade é especificado em um elemento ScalarProperty filho.The property-column mapping is specified in a child ScalarProperty element.

Quando um elemento EndProperty é usado para definir o mapeamento para o final de uma associação de modelo conceitual, ele é um filho de um elemento AssociationSetMapping.When an EndProperty element is used to define the mapping for the end of a conceptual model association, it is a child of an AssociationSetMapping element. Quando o elemento EndProperty é usado para definir o mapeamento para uma função de modificação de uma associação de modelo conceitual, ele é um filho de um elemento InsertFunction ou um elemento DeleteFunction.When the EndProperty element is used to define the mapping for a modification function of a conceptual model association, it is a child of an InsertFunction element or DeleteFunction element.

O elemento EndProperty pode ter os seguintes elementos filho:The EndProperty element can have the following child elements:

  • ScalarProperty (zero ou mais)ScalarProperty (zero or more)

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que são aplicáveis ao elemento EndProperty :The following table describes the attributes that are applicable to the EndProperty element:

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
NomeName SimYes O nome da extremidade de associação que está sendo mapeada.The name of the association end that is being mapped.

ExemploExample

O exemplo a seguir mostra um elemento AssociationSetMapping no qual a associação do Departamento do _ curso _ de FK no modelo conceitual é mapeada para a tabela do curso no banco de dados.The following example shows an AssociationSetMapping element in which the FK_Course_Department association in the conceptual model is mapped to the Course table in the database. Os mapeamentos entre as propriedades do tipo de associação e as colunas de tabela são especificados nos elementos filho EndProperty .Mappings between association type properties and table columns are specified in child EndProperty elements.

 <AssociationSetMapping Name="FK_Course_Department"
                        TypeName="SchoolModel.FK_Course_Department"
                        StoreEntitySet="Course">
   <EndProperty Name="Department">
     <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
 </AssociationSetMapping>

ExemploExample

O exemplo a seguir mostra o elemento EndProperty que mapeia as funções INSERT e Delete de uma associação (CourseInstructor) para procedimentos armazenados no banco de dados subjacente.The following example shows the EndProperty element mapping the insert and delete functions of an association (CourseInstructor) to stored procedures in the underlying database. As funções que são mapeadas para são declaradas no modelo de armazenamento.The functions that are mapped to are declared in the storage model.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

Elemento EntityContainerMapping (MSL)EntityContainerMapping Element (MSL)

O elemento EntityContainerMapping na MSL (linguagem de especificação de mapeamento) mapeia o contêiner de entidade no modelo conceitual para o contêiner de entidade no modelo de armazenamento.The EntityContainerMapping element in mapping specification language (MSL) maps the entity container in the conceptual model to the entity container in the storage model. O elemento EntityContainerMapping é um filho do elemento Mapping.The EntityContainerMapping element is a child of the Mapping element.

O elemento EntityContainerMapping pode ter os seguintes elementos filho (na ordem listada):The EntityContainerMapping element can have the following child elements (in the order listed):

  • EntitySetMapping (zero ou mais)EntitySetMapping (zero or more)
  • AssociationSetMapping (zero ou mais)AssociationSetMapping (zero or more)
  • FunctionImportMapping (zero ou mais)FunctionImportMapping (zero or more)

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento EntityContainerMapping .The following table describes the attributes that can be applied to the EntityContainerMapping element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
StorageModelContainerStorageModelContainer SimYes O nome do contêiner de entidade do modelo de armazenamento que está sendo mapeado.The name of the storage model entity container that is being mapped.
CdmEntityContainerCdmEntityContainer SimYes O nome do contêiner de entidade do modelo conceitual que está sendo mapeado.The name of the conceptual model entity container that is being mapped.
GenerateUpdateViewsGenerateUpdateViews NãoNo True ou false.True or False. Se for false, nenhum modo de exibição de atualização será gerado.If False, no update views are generated. Esse atributo deve ser definido como false quando você tem um mapeamento somente leitura que seria inválido porque os dados não podem fazer viagens de ida e volta com êxito.This attribute should be set to False when you have a read-only mapping that would be invalid because data may not round-trip successfully.
O valor padrão é True.The default value is True.

ExemploExample

O exemplo a seguir mostra um elemento EntityContainerMapping que mapeia o contêiner SchoolModelEntities (o contêiner de entidade modelo conceitual) para o contêiner SchoolModelStoreContainer (o contêiner de entidade modelo de armazenamento):The following example shows an EntityContainerMapping element that maps the SchoolModelEntities container (the conceptual model entity container) to the SchoolModelStoreContainer container (the storage model entity container):

 <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
                         CdmEntityContainer="SchoolModelEntities">
   <EntitySetMapping Name="Courses">
     <EntityTypeMapping TypeName="c.Course">
       <MappingFragment StoreEntitySet="Course">
         <ScalarProperty Name="CourseID" ColumnName="CourseID" />
         <ScalarProperty Name="Title" ColumnName="Title" />
         <ScalarProperty Name="Credits" ColumnName="Credits" />
         <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
       </MappingFragment>
     </EntityTypeMapping>
   </EntitySetMapping>
   <EntitySetMapping Name="Departments">
     <EntityTypeMapping TypeName="c.Department">
       <MappingFragment StoreEntitySet="Department">
         <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
         <ScalarProperty Name="Name" ColumnName="Name" />
         <ScalarProperty Name="Budget" ColumnName="Budget" />
         <ScalarProperty Name="StartDate" ColumnName="StartDate" />
         <ScalarProperty Name="Administrator" ColumnName="Administrator" />
       </MappingFragment>
     </EntityTypeMapping>
   </EntitySetMapping>
 </EntityContainerMapping>

Elemento EntitySetMapping (MSL)EntitySetMapping Element (MSL)

O elemento EntitySetMapping no mapear Language (MSL) mapeia todos os tipos em uma entidade de modelo conceitual definida para conjuntos de entidades no modelo de armazenamento.The EntitySetMapping element in mapping specification language (MSL) maps all types in a conceptual model entity set to entity sets in the storage model. Um conjunto de entidades no modelo conceitual é um contêiner lógico para instâncias de entidades do mesmo tipo (e tipos derivados).An entity set in the conceptual model is a logical container for instances of entities of the same type (and derived types). Uma entidade definida no modelo de armazenamento representa uma tabela ou exibição no banco de dados subjacente.An entity set in the storage model represents a table or view in the underlying database. O conjunto de entidades do modelo conceitual é especificado pelo valor do atributo Name do elemento EntitySetMapping .The conceptual model entity set is specified by the value of the Name attribute of the EntitySetMapping element. A tabela ou exibição mapeada é especificada pelo atributo StoreEntitySet em cada elemento MappingFragment filho ou no elemento EntitySetMapping em si.The mapped-to table or view is specified by the StoreEntitySet attribute in each child MappingFragment element or in the EntitySetMapping element itself.

O elemento EntitySetMapping pode ter os seguintes elementos filho:The EntitySetMapping element can have the following child elements:

  • EntityTypeMapping (zero ou mais)EntityTypeMapping (zero or more)
  • QueryView (zero ou um)QueryView (zero or one)
  • MappingFragment (zero ou mais)MappingFragment (zero or more)

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento EntitySetMapping .The following table describes the attributes that can be applied to the EntitySetMapping element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
NomeName SimYes O nome do conjunto de entidades do modelo conceitual que está sendo mapeado.The name of the conceptual model entity set that is being mapped.
TypeName 1TypeName 1 NãoNo O nome do tipo de entidade do modelo conceitual que está sendo mapeado.The name of the conceptual model entity type that is being mapped.
StoreEntitySet 1StoreEntitySet 1 NãoNo O nome do conjunto de entidades do modelo de armazenamento que está sendo mapeado para.The name of the storage model entity set that is being mapped to.
MakeColumnsDistinctMakeColumnsDistinct NãoNo True ou false dependendo se apenas linhas distintas forem retornadas.True or False depending on whether only distinct rows are returned.
Se esse atributo for definido como true, o atributo GenerateUpdateViews do elemento EntityContainerMapping deverá ser definido como false.If this attribute is set to True, the GenerateUpdateViews attribute of the EntityContainerMapping element must be set to False.

 

1 os atributos TypeName e StoreEntitySet podem ser usados no lugar dos elementos filho EntityTypeMapping e MappingFragment para mapear um único tipo de entidade para uma única tabela.1 The TypeName and StoreEntitySet attributes can be used in place of the EntityTypeMapping and MappingFragment child elements to map a single entity type to a single table.

ExemploExample

O exemplo a seguir mostra um elemento EntitySetMapping que mapeia três tipos (um tipo base e dois tipos derivados) no conjunto de entidades de cursos do modelo conceitual para três tabelas diferentes no banco de dados subjacente.The following example shows an EntitySetMapping element that maps three types (a base type and two derived types) in the Courses entity set of the conceptual model to three different tables in the underlying database. As tabelas são especificadas pelo atributo StoreEntitySet em cada elemento MappingFragment .The tables are specified by the StoreEntitySet attribute in each MappingFragment element.

 <EntitySetMapping Name="Courses">
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel1.Course)">
     <MappingFragment StoreEntitySet="Course">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
       <ScalarProperty Name="Credits" ColumnName="Credits" />
       <ScalarProperty Name="Title" ColumnName="Title" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel1.OnlineCourse)">
     <MappingFragment StoreEntitySet="OnlineCourse">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="URL" ColumnName="URL" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel1.OnsiteCourse)">
     <MappingFragment StoreEntitySet="OnsiteCourse">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="Time" ColumnName="Time" />
       <ScalarProperty Name="Days" ColumnName="Days" />
       <ScalarProperty Name="Location" ColumnName="Location" />
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

Elemento EntityTypeMapping (MSL)EntityTypeMapping Element (MSL)

O elemento EntityTypeMapping na MSL (mapeation Specification Language) define o mapeamento entre um tipo de entidade no modelo conceitual e as tabelas ou exibições no banco de dados subjacente.The EntityTypeMapping element in mapping specification language (MSL) defines the mapping between an entity type in the conceptual model and tables or views in the underlying database. Para obter informações sobre tipos de entidade de modelo conceitual e tabelas ou exibições de banco de dados subjacentes, consulte elemento EntityType (CSDL) e elemento EntitySet (SSDL).For information about conceptual model entity types and underlying database tables or views, see EntityType Element (CSDL) and EntitySet Element (SSDL). O tipo de entidade modelo conceitual que está sendo mapeado é especificado pelo atributo TypeName do elemento EntityTypeMapping .The conceptual model entity type that is being mapped is specified by the TypeName attribute of the EntityTypeMapping element. A tabela ou exibição que está sendo mapeada é especificada pelo atributo StoreEntitySet do elemento MappingFragment filho.The table or view that is being mapped is specified by the StoreEntitySet attribute of the child MappingFragment element.

O elemento filho ModificationFunctionMapping pode ser usado para mapear as funções INSERT, Update ou Delete de tipos de entidade para procedimentos armazenados no banco de dados.The ModificationFunctionMapping child element can be used to map the insert, update, or delete functions of entity types to stored procedures in the database.

O elemento EntityTypeMapping pode ter os seguintes elementos filho:The EntityTypeMapping element can have the following child elements:

  • MappingFragment (zero ou mais)MappingFragment (zero or more)
  • ModificationFunctionMapping (zero ou um)ModificationFunctionMapping (zero or one)
  • ScalarPropertyScalarProperty
  • CondiçãoCondition

Observação

Os elementos MappingFragment e ModificationFunctionMapping não podem ser elementos filho do elemento EntityTypeMapping ao mesmo tempo.MappingFragment and ModificationFunctionMapping elements cannot be child elements of the EntityTypeMapping element at the same time.

Observação

Os elementos ScalarProperty e Condition só podem ser elementos filho do elemento EntityTypeMapping quando ele é usado dentro de um elemento FunctionImportMapping.The ScalarProperty and Condition elements can only be child elements of the EntityTypeMapping element when it is used within a FunctionImportMapping element.

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento EntityTypeMapping .The following table describes the attributes that can be applied to the EntityTypeMapping element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
TypeNameTypeName SimYes O nome qualificado do namespace do tipo de entidade do modelo conceitual que está sendo mapeado.The namespace-qualified name of the conceptual model entity type that is being mapped.
Se o tipo for abstrato ou um tipo derivado, o valor deverá ser IsOfType(Namespace-qualified_type_name) .If the type is abstract or a derived type, the value must be IsOfType(Namespace-qualified_type_name).

ExemploExample

O exemplo a seguir mostra um elemento EntitySetMapping com dois elementos filho EntityTypeMapping .The following example shows an EntitySetMapping element with two child EntityTypeMapping elements. No primeiro elemento EntityTypeMapping , o tipo de entidade SchoolModel. Person é mapeado para a tabela Person .In the first EntityTypeMapping element, the SchoolModel.Person entity type is mapped to the Person table. No segundo elemento EntityTypeMapping , a funcionalidade de atualização do tipo SchoolModel. Person é mapeada para um procedimento armazenado, UpdatePerson, no banco de dados.In the second EntityTypeMapping element, the update functionality of the SchoolModel.Person type is mapped to a stored procedure, UpdatePerson, in the database.

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate" ColumnName="EnrollmentDate" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <ModificationFunctionMapping>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
         <ScalarProperty Name="EnrollmentDate" ParameterName="EnrollmentDate"
                         Version="Current" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate"
                         Version="Current" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName"
                         Version="Current" />
         <ScalarProperty Name="LastName" ParameterName="LastName"
                         Version="Current" />
         <ScalarProperty Name="PersonID" ParameterName="PersonID"
                         Version="Current" />
       </UpdateFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

ExemploExample

O exemplo a seguir mostra o mapeamento de uma hierarquia de tipo na qual o tipo de raiz é abstrato.The next example shows the mapping of a type hierarchy in which the root type is abstract. Observe o uso da IsOfType sintaxe para os atributos TypeName .Note the use of the IsOfType syntax for the TypeName attributes.

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Person)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Instructor)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <Condition ColumnName="HireDate" IsNull="false" />
       <Condition ColumnName="EnrollmentDate" IsNull="true" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Student)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
       <Condition ColumnName="EnrollmentDate" IsNull="false" />
       <Condition ColumnName="HireDate" IsNull="true" />
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

Elemento FunctionImportMapping (MSL)FunctionImportMapping Element (MSL)

O elemento FunctionImportMapping na MSL (linguagem de especificação de mapeamento) define o mapeamento entre uma importação de função no modelo conceitual e um procedimento armazenado ou uma função no banco de dados subjacente.The FunctionImportMapping element in mapping specification language (MSL) defines the mapping between a function import in the conceptual model and a stored procedure or function in the underlying database. As importações de função devem ser declaradas no modelo conceitual e os procedimentos armazenados devem ser declarados no modelo de armazenamento.Function imports must be declared in the conceptual model and stored procedures must be declared in the storage model. Para obter mais informações, consulte elemento FunctionImport (CSDL) e elemento Function (SSDL).For more information, see FunctionImport Element (CSDL) and Function Element (SSDL).

Observação

Por padrão, se uma importação de função retornar um tipo de entidade de modelo conceitual ou tipo complexo, os nomes das colunas retornadas pelo procedimento armazenado subjacente devem corresponder exatamente aos nomes das propriedades no tipo de modelo conceitual.By default, if a function import returns a conceptual model entity type or complex type, then the names of the columns returned by the underlying stored procedure must exactly match the names of the properties on the conceptual model type. Se os nomes de coluna não corresponderem exatamente aos nomes de propriedade, o mapeamento deverá ser definido em um elemento ResultMapping.If the column names do not exactly match the property names, the mapping must be defined in a ResultMapping element.

O elemento FunctionImportMapping pode ter os seguintes elementos filho:The FunctionImportMapping element can have the following child elements:

  • ResultMapping (zero ou mais)ResultMapping (zero or more)

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que são aplicáveis ao elemento FunctionImportMapping :The following table describes the attributes that are applicable to the FunctionImportMapping element:

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
FunctionImportNameFunctionImportName SimYes O nome da função de importação no modelo conceitual que está sendo mapeado.The name of the function import in the conceptual model that is being mapped.
FunctionNameFunctionName SimYes O nome qualificado do namespace da função no modelo de armazenamento que está sendo mapeado.The namespace-qualified name of the function in the storage model that is being mapped.

ExemploExample

O exemplo a seguir é baseado no modelo escolar.The following example is based on the School model. Considere a seguinte função no modelo de armazenamento:Consider the following function in the storage model:

 <Function Name="GetStudentGrades" Aggregate="false"
           BuiltIn="false" NiladicFunction="false"
           IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion"
           Schema="dbo">
   <Parameter Name="StudentID" Type="int" Mode="In" />
 </Function>

Considere também essa importação de função no modelo conceitual:Also consider this function import in the conceptual model:

 <FunctionImport Name="GetStudentGrades" EntitySet="StudentGrades"
                 ReturnType="Collection(SchoolModel.StudentGrade)">
   <Parameter Name="StudentID" Mode="In" Type="Int32" />
 </FunctionImport>

O exemplo a seguir mostra um elemento FunctionImportMapping usado para mapear a função e a importação de função acima entre si:The following example show a FunctionImportMapping element used to map the function and function import above to each other:

 <FunctionImportMapping FunctionImportName="GetStudentGrades"
                        FunctionName="SchoolModel.Store.GetStudentGrades" />

 

Elemento InsertFunction (MSL)InsertFunction Element (MSL)

O elemento InsertFunction na MSL (linguagem de especificação de mapeamento) mapeia a função Insert de um tipo de entidade ou associação no modelo conceitual para um procedimento armazenado no banco de dados subjacente.The InsertFunction element in mapping specification language (MSL) maps the insert function of an entity type or association in the conceptual model to a stored procedure in the underlying database. Os procedimentos armazenados para os quais as funções de modificação são mapeadas devem ser declarados no modelo de armazenamento.Stored procedures to which modification functions are mapped must be declared in the storage model. Para obter mais informações, consulte elemento Function (SSDL).For more information, see Function Element (SSDL).

Observação

Se você não mapear todas as três das operações de inserção, atualização ou exclusão de um tipo de entidade para procedimentos armazenados, as operações não mapeadas falharão se executadas em tempo de execução e uma UpdateException for gerada.If you do not map all three of the insert, update, or delete operations of a entity type to stored procedures, the unmapped operations will fail if executed at runtime and an UpdateException is thrown.

O elemento InsertFunction pode ser filho do elemento ModificationFunctionMapping e aplicado ao elemento EntityTypeMapping ou ao elemento AssociationSetMapping.The InsertFunction element can be a child of the ModificationFunctionMapping element and applied to the EntityTypeMapping element or the AssociationSetMapping element.

InsertFunction aplicado a EntityTypeMappingInsertFunction Applied to EntityTypeMapping

Quando aplicado ao elemento EntityTypeMapping, o elemento InsertFunction mapeia a função Insert de um tipo de entidade no modelo conceitual para um procedimento armazenado.When applied to the EntityTypeMapping element, the InsertFunction element maps the insert function of an entity type in the conceptual model to a stored procedure.

O elemento InsertFunction pode ter os seguintes elementos filho quando aplicados a um elemento EntityTypeMapping :The InsertFunction element can have the following child elements when applied to an EntityTypeMapping element:

  • AssociationEnd (zero ou mais)AssociationEnd (zero or more)
  • ComplexProperty (zero ou mais)ComplexProperty (zero or more)
  • Resultbinding (zero ou um)ResultBinding (zero or one)
  • ScarlarProperty (zero ou mais)ScarlarProperty (zero or more)

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento InsertFunction quando aplicados a um elemento EntityTypeMapping .The following table describes the attributes that can be applied to the InsertFunction element when applied to an EntityTypeMapping element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
FunctionNameFunctionName SimYes O nome qualificado do namespace do procedimento armazenado para o qual a função Insert é mapeada.The namespace-qualified name of the stored procedure to which the insert function is mapped. O procedimento armazenado deve ser declarado no modelo de armazenamento.The stored procedure must be declared in the storage model.
RowsAffectedParameterRowsAffectedParameter NãoNo O nome do parâmetro de saída que retorna o número de linhas afetadas.The name of the output parameter that returns the number of affected rows.

ExemploExample

O exemplo a seguir é baseado no modelo escolar e mostra o elemento InsertFunction usado para mapear a função Insert do tipo de entidade Person para o procedimento armazenado InsertPerson .The following example is based on the School model and shows the InsertFunction element used to map insert function of the Person entity type to the InsertPerson stored procedure. O procedimento armazenado InsertPerson é declarado no modelo de armazenamento.The InsertPerson stored procedure is declared in the storage model.

 <EntityTypeMapping TypeName="SchoolModel.Person">
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName" />
       <ScalarProperty Name="LastName" ParameterName="LastName" />
       <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
     </InsertFunction>
     <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate"
                       Version="Current" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate"
                       Version="Current" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName"
                       Version="Current" />
       <ScalarProperty Name="LastName" ParameterName="LastName"
                       Version="Current" />
       <ScalarProperty Name="PersonID" ParameterName="PersonID"
                       Version="Current" />
     </UpdateFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
       <ScalarProperty Name="PersonID" ParameterName="PersonID" />
     </DeleteFunction>
   </ModificationFunctionMapping>
 </EntityTypeMapping>

InsertFunction aplicado a AssociationSetMappingInsertFunction Applied to AssociationSetMapping

Quando aplicado ao elemento AssociationSetMapping, o elemento InsertFunction mapeia a função Insert de uma associação no modelo conceitual para um procedimento armazenado.When applied to the AssociationSetMapping element, the InsertFunction element maps the insert function of an association in the conceptual model to a stored procedure.

O elemento InsertFunction pode ter os seguintes elementos filho quando aplicado ao elemento AssociationSetMapping :The InsertFunction element can have the following child elements when applied to the AssociationSetMapping element:

  • EndPropertyEndProperty

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento InsertFunction quando ele é aplicado ao elemento AssociationSetMapping .The following table describes the attributes that can be applied to the InsertFunction element when it is applied to the AssociationSetMapping element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
FunctionNameFunctionName SimYes O nome qualificado do namespace do procedimento armazenado para o qual a função Insert é mapeada.The namespace-qualified name of the stored procedure to which the insert function is mapped. O procedimento armazenado deve ser declarado no modelo de armazenamento.The stored procedure must be declared in the storage model.
RowsAffectedParameterRowsAffectedParameter NãoNo O nome do parâmetro de saída que retorna o número de linhas afetadas.The name of the output parameter that returns the number of rows affected.

ExemploExample

O exemplo a seguir é baseado no modelo escolar e mostra o elemento InsertFunction usado para mapear a função Insert da Associação CourseInstructor para o procedimento armazenado InsertCourseInstructor .The following example is based on the School model and shows the InsertFunction element used to map insert function of the CourseInstructor association to the InsertCourseInstructor stored procedure. O procedimento armazenado InsertCourseInstructor é declarado no modelo de armazenamento.The InsertCourseInstructor stored procedure is declared in the storage model.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

Elemento Mapping (MSL)Mapping Element (MSL)

O elemento Mapping na MSL (Mapping Specification Language) contém informações para mapear objetos que são definidos em um modelo conceitual para um banco de dados (conforme descrito em um modelo de armazenamento).The Mapping element in mapping specification language (MSL) contains information for mapping objects that are defined in a conceptual model to a database (as described in a storage model). Para obter mais informações, consulte Especificação de CSDL e especificação de SSDL.For more information, see CSDL Specification and SSDL Specification.

O elemento Mapping é o elemento raiz para uma especificação de mapeamento.The Mapping element is the root element for a mapping specification. O namespace XML para as especificações de mapeamento é https://schemas.microsoft.com/ado/2009/11/mapping/cs .The XML namespace for mapping specifications is https://schemas.microsoft.com/ado/2009/11/mapping/cs.

O elemento Mapping pode ter os seguintes elementos filho (na ordem listada):The mapping element can have the following child elements (in the order listed):

  • Alias (zero ou mais)Alias (zero or more)
  • EntityContainerMapping (exatamente um)EntityContainerMapping (exactly one)

Os nomes dos tipos de modelo conceitual e de armazenamento referenciados no MSL devem ser qualificados por seus respectivos nomes de namespace.Names of conceptual and storage model types that are referenced in MSL must be qualified by their respective namespace names. Para obter informações sobre o nome do namespace do modelo conceitual, consulte elemento Schema (CSDL).For information about the conceptual model namespace name, see Schema Element (CSDL). Para obter informações sobre o nome do namespace do modelo de armazenamento, consulte elemento de esquema (SSDL).For information about the storage model namespace name, see Schema Element (SSDL). Aliases para namespaces que são usados em MSL podem ser definidos com o elemento alias.Aliases for namespaces that are used in MSL can be defined with the Alias element.

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento Mapping .The table below describes the attributes that can be applied to the Mapping element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
DiscoSpace SimYes C-S.C-S. Este é um valor fixo e não pode ser alterado.This is a fixed value and cannot be changed.

ExemploExample

O exemplo a seguir mostra um elemento Mapping que é baseado em parte do modelo escolar.The following example shows a Mapping element that is based on part of the School model. Para obter mais informações sobre o modelo escolar, consulte início rápido (Entity Framework):For more information about the School model, see Quickstart (Entity Framework):

 <Mapping Space="C-S"
          xmlns="https://schemas.microsoft.com/ado/2009/11/mapping/cs">
   <Alias Key="c" Value="SchoolModel"/>
   <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
                           CdmEntityContainer="SchoolModelEntities">
     <EntitySetMapping Name="Courses">
       <EntityTypeMapping TypeName="c.Course">
         <MappingFragment StoreEntitySet="Course">
           <ScalarProperty Name="CourseID" ColumnName="CourseID" />
           <ScalarProperty Name="Title" ColumnName="Title" />
           <ScalarProperty Name="Credits" ColumnName="Credits" />
           <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
         </MappingFragment>
       </EntityTypeMapping>
     </EntitySetMapping>
     <EntitySetMapping Name="Departments">
       <EntityTypeMapping TypeName="c.Department">
         <MappingFragment StoreEntitySet="Department">
           <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
           <ScalarProperty Name="Name" ColumnName="Name" />
           <ScalarProperty Name="Budget" ColumnName="Budget" />
           <ScalarProperty Name="StartDate" ColumnName="StartDate" />
           <ScalarProperty Name="Administrator" ColumnName="Administrator" />
         </MappingFragment>
       </EntityTypeMapping>
     </EntitySetMapping>
   </EntityContainerMapping>
 </Mapping>

Elemento MappingFragment (MSL)MappingFragment Element (MSL)

O elemento MappingFragment na MSL (linguagem de especificação de mapeamento) define o mapeamento entre as propriedades de um tipo de entidade de modelo conceitual e uma tabela ou exibição no banco de dados.The MappingFragment element in mapping specification language (MSL) defines the mapping between the properties of a conceptual model entity type and a table or view in the database. Para obter informações sobre tipos de entidade de modelo conceitual e tabelas ou exibições de banco de dados subjacentes, consulte elemento EntityType (CSDL) e elemento EntitySet (SSDL).For information about conceptual model entity types and underlying database tables or views, see EntityType Element (CSDL) and EntitySet Element (SSDL). O MappingFragment pode ser um elemento filho do elemento EntityTypeMapping ou do elemento EntitySetMapping.The MappingFragment can be a child element of the EntityTypeMapping element or the EntitySetMapping element.

O elemento MappingFragment pode ter os seguintes elementos filho:The MappingFragment element can have the following child elements:

  • ComplexType (zero ou mais)ComplexType (zero or more)
  • ScalarProperty (zero ou mais)ScalarProperty (zero or more)
  • Condição (zero ou mais)Condition (zero or more)

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento MappingFragment .The following table describes the attributes that can be applied to the MappingFragment element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
StoreEntitySetStoreEntitySet SimYes O nome da tabela ou exibição que está sendo mapeada.The name of the table or view that is being mapped.
MakeColumnsDistinctMakeColumnsDistinct NãoNo True ou false dependendo se apenas linhas distintas forem retornadas.True or False depending on whether only distinct rows are returned.
Se esse atributo for definido como true, o atributo GenerateUpdateViews do elemento EntityContainerMapping deverá ser definido como false.If this attribute is set to True, the GenerateUpdateViews attribute of the EntityContainerMapping element must be set to False.

ExemploExample

O exemplo a seguir mostra um elemento MappingFragment como o filho de um elemento EntityTypeMapping .The following example shows a MappingFragment element as the child of an EntityTypeMapping element. Neste exemplo, as propriedades do tipo de curso no modelo conceitual são mapeadas para colunas da tabela do curso no banco de dados.In this example, properties of the Course type in the conceptual model are mapped to columns of the Course table in the database.

 <EntitySetMapping Name="Courses">
   <EntityTypeMapping TypeName="SchoolModel.Course">
     <MappingFragment StoreEntitySet="Course">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="Title" ColumnName="Title" />
       <ScalarProperty Name="Credits" ColumnName="Credits" />
       <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

ExemploExample

O exemplo a seguir mostra um elemento MappingFragment como o filho de um elemento EntitySetMapping .The following example shows a MappingFragment element as the child of an EntitySetMapping element. Como no exemplo acima, as propriedades do tipo de curso no modelo conceitual são mapeadas para colunas da tabela do curso no banco de dados.As in the example above, properties of the Course type in the conceptual model are mapped to columns of the Course table in the database.

 <EntitySetMapping Name="Courses" TypeName="SchoolModel.Course">
     <MappingFragment StoreEntitySet="Course">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="Title" ColumnName="Title" />
       <ScalarProperty Name="Credits" ColumnName="Credits" />
       <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
     </MappingFragment>
 </EntitySetMapping>

Elemento ModificationFunctionMapping (MSL)ModificationFunctionMapping Element (MSL)

O elemento ModificationFunctionMapping na MSL (linguagem de especificação de mapeamento) mapeia as funções de inserção, atualização e exclusão de um tipo de entidade modelo conceitual para procedimentos armazenados no banco de dados subjacente.The ModificationFunctionMapping element in mapping specification language (MSL) maps the insert, update, and delete functions of a conceptual model entity type to stored procedures in the underlying database. O elemento ModificationFunctionMapping também pode mapear as funções INSERT e Delete para associações muitos para muitos no modelo conceitual para procedimentos armazenados no banco de dados subjacente.The ModificationFunctionMapping element can also map the insert and delete functions for many-to-many associations in the conceptual model to stored procedures in the underlying database. Os procedimentos armazenados para os quais as funções de modificação são mapeadas devem ser declarados no modelo de armazenamento.Stored procedures to which modification functions are mapped must be declared in the storage model. Para obter mais informações, consulte elemento Function (SSDL).For more information, see Function Element (SSDL).

Observação

Se você não mapear todas as três das operações de inserção, atualização ou exclusão de um tipo de entidade para procedimentos armazenados, as operações não mapeadas falharão se executadas em tempo de execução e uma UpdateException for gerada.If you do not map all three of the insert, update, or delete operations of a entity type to stored procedures, the unmapped operations will fail if executed at runtime and an UpdateException is thrown.

Observação

Se as funções de modificação para uma entidade em uma hierarquia de herança forem mapeadas para procedimentos armazenados, as funções de modificação para todos os tipos na hierarquia deverão ser mapeadas para procedimentos armazenados.If the modification functions for one entity in an inheritance hierarchy are mapped to stored procedures, then modification functions for all types in the hierarchy must be mapped to stored procedures.

O elemento ModificationFunctionMapping pode ser filho do elemento EntityTypeMapping ou do elemento AssociationSetMapping.The ModificationFunctionMapping element can be a child of the EntityTypeMapping element or the AssociationSetMapping element.

O elemento ModificationFunctionMapping pode ter os seguintes elementos filho:The ModificationFunctionMapping element can have the following child elements:

  • DeleteFunction (zero ou um)DeleteFunction (zero or one)
  • InsertFunction (zero ou um)InsertFunction (zero or one)
  • UpdateFunction (zero ou um)UpdateFunction (zero or one)

Nenhum atributo é aplicável ao elemento ModificationFunctionMapping .No attributes are applicable to the ModificationFunctionMapping element.

ExemploExample

O exemplo a seguir mostra o mapeamento do conjunto de entidades para a entidade pessoas definida no modelo School.The following example shows the entity set mapping for the People entity set in the School model. Além do mapeamento de coluna para o tipo de entidade Person , o mapeamento das funções INSERT, Update e Delete do tipo Person é mostrado.In addition to the column mapping for the Person entity type, the mapping of the insert, update, and delete functions of the Person type are shown. As funções que são mapeadas para são declaradas no modelo de armazenamento.The functions that are mapped to are declared in the storage model.

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
     </MappingFragment>
 </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <ModificationFunctionMapping>
       <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName" />
         <ScalarProperty Name="LastName" ParameterName="LastName" />
         <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
       </InsertFunction>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate"
                         Version="Current" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate"
                         Version="Current" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName"
                         Version="Current" />
         <ScalarProperty Name="LastName" ParameterName="LastName"
                         Version="Current" />
         <ScalarProperty Name="PersonID" ParameterName="PersonID"
                         Version="Current" />
       </UpdateFunction>
       <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
         <ScalarProperty Name="PersonID" ParameterName="PersonID" />
       </DeleteFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

ExemploExample

O exemplo a seguir mostra o mapeamento do conjunto de associação para o conjunto de associação CourseInstructor no modelo School.The following example shows the association set mapping for the CourseInstructor association set in the School model. Além do mapeamento de coluna para a associação CourseInstructor , o mapeamento das funções INSERT e Delete da Associação CourseInstructor é mostrado.In addition to the column mapping for the CourseInstructor association, the mapping of the insert and delete functions of the CourseInstructor association are shown. As funções que são mapeadas para são declaradas no modelo de armazenamento.The functions that are mapped to are declared in the storage model.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

 

 

Elemento QueryView (MSL)QueryView Element (MSL)

O elemento QueryView na MSL (linguagem de especificação de mapeamento) define um mapeamento somente leitura entre um tipo de entidade ou associação no modelo conceitual e uma tabela no banco de dados subjacente.The QueryView element in mapping specification language (MSL) defines a read-only mapping between an entity type or association in the conceptual model and a table in the underlying database. O mapeamento é definido com uma consulta Entity SQL que é avaliada em relação ao modelo de armazenamento e você expressa o conjunto de resultados em termos de uma entidade ou associação no modelo conceitual.The mapping is defined with an Entity SQL query that is evaluated against the storage model, and you express the result set in terms of an entity or association in the conceptual model. Como as exibições de consulta são somente leitura, você não pode usar comandos de atualização padrão para atualizar tipos que são definidos por exibições de consulta.Because query views are read-only, you cannot use standard update commands to update types that are defined by query views. Você pode fazer atualizações para esses tipos usando funções de modificação.You can make updates to these types by using modification functions. Para obter mais informações, consulte como mapear funções de modificação para procedimentos armazenados.For more information, see How to: Map Modification Functions to Stored Procedures.

Observação

No elemento QueryView , Entity SQL expressões que contêm GroupBy, agregações de grupo ou propriedades de navegação não têm suporte.In the QueryView element, Entity SQL expressions that contain GroupBy, group aggregates, or navigation properties are not supported.

 

O elemento QueryView pode ser filho do elemento EntitySetMapping ou do elemento AssociationSetMapping.The QueryView element can be a child of the EntitySetMapping element or the AssociationSetMapping element. No primeiro caso, a exibição de consulta define um mapeamento somente leitura para uma entidade no modelo conceitual.In the former case, the query view defines a read-only mapping for an entity in the conceptual model. No último caso, a exibição de consulta define um mapeamento somente leitura para uma associação no modelo conceitual.In the latter case, the query view defines a read-only mapping for an association in the conceptual model.

Observação

Se o elemento AssociationSetMapping for para uma associação com uma restrição referencial, o elemento AssociationSetMapping será ignorado.If the AssociationSetMapping element is for an association with a referential constraint, the AssociationSetMapping element is ignored. Para obter mais informações, consulte elemento ReferentialConstraint (CSDL).For more information, see ReferentialConstraint Element (CSDL).

O elemento QueryView não pode ter nenhum elemento filho.The QueryView element cannot have any child elements.

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento QueryView .The following table describes the attributes that can be applied to the QueryView element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
TypeNameTypeName NãoNo O nome do tipo de modelo conceitual que está sendo mapeado pelo modo de exibição de consulta.The name of the conceptual model type that is being mapped by the query view.

ExemploExample

O exemplo a seguir mostra o elemento QueryView como um filho do elemento EntitySetMapping e define um mapeamento de exibição de consulta para o tipo de entidade Department no modelo School.The following example shows the QueryView element as a child of the EntitySetMapping element and defines a query view mapping for the Department entity type in the School Model.

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

Como a consulta retorna apenas um subconjunto dos membros do tipo de Departamento no modelo de armazenamento, o tipo de Departamento no modelo escolar foi modificado com base nesse mapeamento da seguinte maneira:Because the query only returns a subset of the members of the Department type in the storage model, the Department type in the School model has been modified based on this mapping as follows:

 <EntityType Name="Department">
   <Key>
     <PropertyRef Name="DepartmentID" />
   </Key>
   <Property Type="Int32" Name="DepartmentID" Nullable="false" />
   <Property Type="String" Name="Name" Nullable="false"
             MaxLength="50" FixedLength="false" Unicode="true" />
   <Property Type="Decimal" Name="Budget" Nullable="false"
             Precision="19" Scale="4" />
   <Property Type="DateTime" Name="StartDate" Nullable="false" />
   <NavigationProperty Name="Courses"
                       Relationship="SchoolModel.FK_Course_Department"
                       FromRole="Department" ToRole="Course" />
 </EntityType>

ExemploExample

O exemplo a seguir mostra o elemento QueryView como o filho de um elemento AssociationSetMapping e define um mapeamento somente leitura para a FK_Course_Department associação no modelo escolar.The next example shows the QueryView element as the child of an AssociationSetMapping element and defines a read-only mapping for the FK_Course_Department association in the School model.

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

 

ComentáriosComments

Você pode definir modos de exibição de consulta para habilitar os seguintes cenários:You can define query views to enable the following scenarios:

  • Defina uma entidade no modelo conceitual que não inclua todas as propriedades da entidade no modelo de armazenamento.Define an entity in the conceptual model that doesn't include all the properties of the entity in the storage model. Isso inclui propriedades que não têm valores padrão e não oferecem suporte a valores nulos .This includes properties that do not have default values and do not support null values.
  • Mapeie colunas computadas no modelo de armazenamento para propriedades de tipos de entidade no modelo conceitual.Map computed columns in the storage model to properties of entity types in the conceptual model.
  • Defina um mapeamento em que as condições usadas para particionar entidades no modelo conceitual não são baseadas na igualdade.Define a mapping where conditions used to partition entities in the conceptual model are not based on equality. Quando você especifica um mapeamento condicional usando o elemento Condition , a condição fornecida deve ser igual ao valor especificado.When you specify a conditional mapping using the Condition element, the supplied condition must equal the specified value. Para obter mais informações, consulte elemento Condition (MSL).For more information, see Condition Element (MSL).
  • Mapeie a mesma coluna no modelo de armazenamento para vários tipos no modelo conceitual.Map the same column in the storage model to multiple types in the conceptual model.
  • Mapeie vários tipos para a mesma tabela.Map multiple types to the same table.
  • Defina associações no modelo conceitual que não se baseiam em chaves estrangeiras no esquema relacional.Define associations in the conceptual model that are not based on foreign keys in the relational schema.
  • Use a lógica de negócios personalizada para definir o valor das propriedades no modelo conceitual.Use custom business logic to set the value of properties in the conceptual model. Por exemplo, você pode mapear o valor de cadeia de caracteres "T" na fonte de dados para um valor de true, um booliano, no modelo conceitual.For example, you could map the string value "T" in the data source to a value of true, a Boolean, in the conceptual model.
  • Defina filtros condicionais para resultados da consulta.Define conditional filters for query results.
  • Impor menos restrições aos dados no modelo conceitual do que no modelo de armazenamento.Enforce fewer restrictions on data in the conceptual model than in the storage model. Por exemplo, você poderia tornar uma propriedade no modelo conceitual anulável mesmo se a coluna para a qual ela está mapeada não oferecer suporte a valores nulos.For example, you could make a property in the conceptual model nullable even if the column to which it is mapped does not support nullvalues.

As seguintes considerações se aplicam quando você define modos de exibição de consulta para entidades:The following considerations apply when you define query views for entities:

  • As exibições de consulta são somente leitura.Query views are read-only. Você só pode fazer atualizações em entidades usando funções de modificação.You can only make updates to entities by using modification functions.
  • Ao definir um tipo de entidade por um modo de exibição de consulta, você também deve definir todas as entidades relacionadas por exibições de consulta.When you define an entity type by a query view, you must also define all related entities by query views.
  • Quando você mapeia uma associação muitos para muitos para uma entidade no modelo de armazenamento que representa uma tabela de vínculo no esquema relacional, você deve definir um elemento QueryView no elemento AssociationSetMapping para essa tabela de vínculo.When you map a many-to-many association to an entity in the storage model that represents a link table in the relational schema, you must define a QueryView element in the AssociationSetMapping element for this link table.
  • As exibições de consulta devem ser definidas para todos os tipos em uma hierarquia de tipo.Query views must be defined for all types in a type hierarchy. Você pode fazer isso das seguintes maneiras:You can do this in the following ways:
    • Com um único elemento QueryView que especifica uma única consulta de Entity SQL que retorna uma União de todos os tipos de entidade na hierarquia.With a single QueryView element that specifies a single Entity SQL query that returns a union of all of the entity types in the hierarchy.
    • Com um único elemento QueryView que especifica uma única consulta Entity SQL que usa o operador case para retornar um tipo de entidade específico na hierarquia com base em uma condição específica.With a single QueryView element that specifies a single Entity SQL query that uses the CASE operator to return a specific entity type in the hierarchy based on a specific condition.
    • Com um elemento QueryView adicional para um tipo específico na hierarquia.With an additional QueryView element for a specific type in the hierarchy. Nesse caso, use o atributo TypeName do elemento QueryView para especificar o tipo de entidade para cada exibição.In this case, use the TypeName attribute of the QueryView element to specify the entity type for each view.
  • Quando um modo de exibição de consulta é definido, você não pode especificar o atributo StorageSetName no elemento EntitySetMapping .When a query view is defined, you cannot specify the StorageSetName attribute on the EntitySetMapping element.
  • Quando um modo de exibição de consulta é definido, o elemento EntitySetMappingtambém não pode conter mapeamentos de Propriedade .When a query view is defined, the EntitySetMappingelement cannot also contain Property mappings.

Elemento resultbinding (MSL)ResultBinding Element (MSL)

O elemento resultbinding no MSL (mapear Language Specification) mapeia valores de coluna que são retornados por procedimentos armazenados para propriedades de entidade no modelo conceitual quando funções de modificação de tipo de entidade são mapeadas para procedimentos armazenados no banco de dados subjacente.The ResultBinding element in mapping specification language (MSL) maps column values that are returned by stored procedures to entity properties in the conceptual model when entity type modification functions are mapped to stored procedures in the underlying database. Por exemplo, quando o valor de uma coluna de identidade é retornado por um procedimento armazenado INSERT, o elemento resultbinding mapeia o valor retornado para uma propriedade de tipo de entidade no modelo conceitual.For example, when the value of an identity column is returned by an insert stored procedure, the ResultBinding element maps the returned value to an entity type property in the conceptual model.

O elemento resultbinding pode ser filho do elemento InsertFunction ou do elemento UpdateFunction.The ResultBinding element can be child of the InsertFunction element or the UpdateFunction element.

O elemento resultbinding não pode ter nenhum elemento filho.The ResultBinding element cannot have any child elements.

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que são aplicáveis ao elemento resultbinding :The following table describes the attributes that are applicable to the ResultBinding element:

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
NomeName SimYes O nome da propriedade de entidade no modelo conceitual que está sendo mapeado.The name of the entity property in the conceptual model that is being mapped.
ColumnNameColumnName SimYes O nome da coluna que está sendo mapeada.The name of the column being mapped.

ExemploExample

O exemplo a seguir é baseado no modelo escolar e mostra um elemento InsertFunction usado para mapear a função Insert do tipo de entidade Person para o procedimento armazenado InsertPerson .The following example is based on the School model and shows an InsertFunction element used to map the insert function of the Person entity type to the InsertPerson stored procedure. (O procedimento armazenado InsertPerson é mostrado abaixo e é declarado no modelo de armazenamento.) Um elemento resultbinding é usado para mapear um valor de coluna que é retornado pelo procedimento armazenado (NewPersonID) para uma propriedade de tipo de entidade (PersonID).(The InsertPerson stored procedure is shown below and is declared in the storage model.) A ResultBinding element is used to map a column value that is returned by the stored procedure (NewPersonID) to an entity type property (PersonID).

 <EntityTypeMapping TypeName="SchoolModel.Person">
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName" />
       <ScalarProperty Name="LastName" ParameterName="LastName" />
       <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
     </InsertFunction>
     <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate"
                       Version="Current" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate"
                       Version="Current" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName"
                       Version="Current" />
       <ScalarProperty Name="LastName" ParameterName="LastName"
                       Version="Current" />
       <ScalarProperty Name="PersonID" ParameterName="PersonID"
                       Version="Current" />
     </UpdateFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
       <ScalarProperty Name="PersonID" ParameterName="PersonID" />
     </DeleteFunction>
   </ModificationFunctionMapping>
 </EntityTypeMapping>

O Transact-SQL a seguir descreve o procedimento armazenado InsertPerson :The following Transact-SQL describes the InsertPerson stored procedure:

 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;

Elemento ResultMapping (MSL)ResultMapping Element (MSL)

O elemento ResultMapping na MSL (linguagem de especificação de mapeamento) define o mapeamento entre uma importação de função no modelo conceitual e um procedimento armazenado no banco de dados subjacente quando o seguinte é verdadeiro:The ResultMapping element in mapping specification language (MSL) defines the mapping between a function import in the conceptual model and a stored procedure in the underlying database when the following are true:

  • A função Import retorna um tipo de entidade de modelo conceitual ou tipo complexo.The function import returns a conceptual model entity type or complex type.
  • Os nomes das colunas retornadas pelo procedimento armazenado não correspondem exatamente aos nomes das propriedades no tipo de entidade ou tipo complexo.The names of the columns returned by the stored procedure do not exactly match the names of the properties on the entity type or complex type.

Por padrão, o mapeamento entre as colunas retornadas por um procedimento armazenado e um tipo de entidade ou tipo complexo baseia-se nos nomes de coluna e propriedade.By default, the mapping between the columns returned by a stored procedure and an entity type or complex type is based on column and property names. Se os nomes de coluna não corresponderem exatamente aos nomes de propriedade, você deverá usar o elemento ResultMapping para definir o mapeamento.If column names do not exactly match property names, you must use the ResultMapping element to define the mapping. Para obter um exemplo do mapeamento padrão, consulte elemento FunctionImportMapping (MSL).For an example of the default mapping, see FunctionImportMapping Element (MSL).

O elemento ResultMapping é um elemento filho do elemento FunctionImportMapping.The ResultMapping element is a child element of the FunctionImportMapping element.

O elemento ResultMapping pode ter os seguintes elementos filho:The ResultMapping element can have the following child elements:

  • EntityTypeMapping (zero ou mais)EntityTypeMapping (zero or more)
  • ComplexTypeMappingComplexTypeMapping

Nenhum atributo é aplicável ao elemento ResultMapping .No attributes are applicable to the ResultMapping Element.

ExemploExample

Considere o seguinte procedimento armazenado:Consider the following stored procedure:

 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 também o seguinte tipo de entidade de modelo conceitual:Also consider the following conceptual model entity type:

 <EntityType Name="StudentGrade">
   <Key>
     <PropertyRef Name="EnrollmentID" />
   </Key>
   <Property Name="EnrollmentID" Type="Int32" Nullable="false"
             annotation:StoreGeneratedPattern="Identity" />
   <Property Name="CourseID" Type="Int32" Nullable="false" />
   <Property Name="StudentID" Type="Int32" Nullable="false" />
   <Property Name="Grade" Type="Decimal" Precision="3" Scale="2" />
 </EntityType>

Para criar uma importação de função que retorne instâncias do tipo de entidade anterior, o mapeamento entre as colunas retornadas pelo procedimento armazenado e o tipo de entidade deve ser definido em um elemento ResultMapping :In order to create a function import that returns instances of the previous entity type, the mapping between the columns returned by the stored procedure and the entity type must be defined in a ResultMapping element:

 <FunctionImportMapping FunctionImportName="GetGrades"
                        FunctionName="SchoolModel.Store.GetGrades" >
   <ResultMapping>
     <EntityTypeMapping TypeName="SchoolModel.StudentGrade">
       <ScalarProperty Name="EnrollmentID" ColumnName="enroll_id"/>
       <ScalarProperty Name="CourseID" ColumnName="course_id"/>
       <ScalarProperty Name="StudentID" ColumnName="student_id"/>
       <ScalarProperty Name="Grade" ColumnName="grade"/>
     </EntityTypeMapping>
   </ResultMapping>
 </FunctionImportMapping>

Elemento ScalarProperty (MSL)ScalarProperty Element (MSL)

O elemento ScalarProperty na MSL (linguagem de especificação de mapeamento) mapeia uma propriedade em um tipo de entidade de modelo conceitual, tipo complexo ou associação a uma coluna de tabela ou parâmetro de procedimento armazenado no banco de dados subjacente.The ScalarProperty element in mapping specification language (MSL) maps a property on a conceptual model entity type, complex type, or association to a table column or stored procedure parameter in the underlying database.

Observação

Os procedimentos armazenados para os quais as funções de modificação são mapeadas devem ser declarados no modelo de armazenamento.Stored procedures to which modification functions are mapped must be declared in the storage model. Para obter mais informações, consulte elemento Function (SSDL).For more information, see Function Element (SSDL).

O elemento ScalarProperty pode ser um filho dos seguintes elementos:The ScalarProperty element can be a child of the following elements:

  • MappingFragmentMappingFragment
  • InsertFunctionInsertFunction
  • UpdateFunctionUpdateFunction
  • DeleteFunctionDeleteFunction
  • EndPropertyEndProperty
  • ComplexPropertyComplexProperty
  • ResultMappingResultMapping

Como um filho do elemento MappingFragment, ComplexPropertyou EndProperty , o elemento ScalarProperty mapeia uma propriedade no modelo conceitual para uma coluna no banco de dados.As a child of the MappingFragment, ComplexProperty, or EndProperty element, the ScalarProperty element maps a property in the conceptual model to a column in the database. Como um filho do elemento InsertFunction, UpdateFunctionou DeleteFunction , o elemento ScalarProperty mapeia uma propriedade no modelo conceitual para um parâmetro de procedimento armazenado.As a child of the InsertFunction, UpdateFunction, or DeleteFunction element, the ScalarProperty element maps a property in the conceptual model to a stored procedure parameter.

O elemento ScalarProperty não pode ter nenhum elemento filho.The ScalarProperty element cannot have any child elements.

Atributos aplicáveisApplicable Attributes

Os atributos que se aplicam ao elemento ScalarProperty diferem de acordo com a função do elemento.The attributes that apply to the ScalarProperty element differ depending on the role of the element.

A tabela a seguir descreve os atributos que são aplicáveis quando o elemento ScalarProperty é usado para mapear uma propriedade de modelo conceitual para uma coluna no banco de dados:The following table describes the attributes that are applicable when the ScalarProperty element is used to map a conceptual model property to a column in the database:

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
NomeName SimYes O nome da Propriedade do modelo conceitual que está sendo mapeada.The name of the conceptual model property that is being mapped.
ColumnNameColumnName SimYes O nome da coluna de tabela que está sendo mapeada.The name of the table column that is being mapped.

A tabela a seguir descreve os atributos que são aplicáveis ao elemento ScalarProperty quando ele é usado para mapear uma propriedade de modelo conceitual para um parâmetro de procedimento armazenado:The following table describes the attributes that are applicable to the ScalarProperty element when it is used to map a conceptual model property to a stored procedure parameter:

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
NomeName SimYes O nome da Propriedade do modelo conceitual que está sendo mapeada.The name of the conceptual model property that is being mapped.
ParameterNameParameterName SimYes O nome do parâmetro que está sendo mapeado.The name of the parameter that is being mapped.
VersãoVersion NãoNo Atual ou original , dependendo se o valor atual ou o valor original da propriedade deve ser usado para verificações de simultaneidade.Current or Original depending on whether the current value or the original value of the property should be used for concurrency checks.

ExemploExample

O exemplo a seguir mostra o elemento ScalarProperty usado de duas maneiras:The following example shows the ScalarProperty element used in two ways:

  • Para mapear as propriedades do tipo de entidade Person para as colunas da tabela Person.To map the properties of the Person entity type to the columns of the Persontable.
  • Para mapear as propriedades do tipo de entidade Person para os parâmetros do procedimento armazenado UpdatePerson .To map the properties of the Person entity type to the parameters of the UpdatePerson stored procedure. Os procedimentos armazenados são declarados no modelo de armazenamento.The stored procedures are declared in the storage model.
 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
     </MappingFragment>
 </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <ModificationFunctionMapping>
       <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName" />
         <ScalarProperty Name="LastName" ParameterName="LastName" />
         <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
       </InsertFunction>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate"
                         Version="Current" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate"
                         Version="Current" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName"
                         Version="Current" />
         <ScalarProperty Name="LastName" ParameterName="LastName"
                         Version="Current" />
         <ScalarProperty Name="PersonID" ParameterName="PersonID"
                         Version="Current" />
       </UpdateFunction>
       <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
         <ScalarProperty Name="PersonID" ParameterName="PersonID" />
       </DeleteFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

ExemploExample

O exemplo a seguir mostra o elemento ScalarProperty usado para mapear as funções INSERT e Delete de uma associação de modelo conceitual para procedimentos armazenados no banco de dados.The next example shows the ScalarProperty element used to map the insert and delete functions of a conceptual model association to stored procedures in the database. Os procedimentos armazenados são declarados no modelo de armazenamento.The stored procedures are declared in the storage model.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

Elemento UpdateFunction (MSL)UpdateFunction Element (MSL)

O elemento UpdateFunction na MSL (linguagem de especificação de mapeamento) mapeia a função Update de um tipo de entidade no modelo conceitual para um procedimento armazenado no banco de dados subjacente.The UpdateFunction element in mapping specification language (MSL) maps the update function of an entity type in the conceptual model to a stored procedure in the underlying database. Os procedimentos armazenados para os quais as funções de modificação são mapeadas devem ser declarados no modelo de armazenamento.Stored procedures to which modification functions are mapped must be declared in the storage model. Para obter mais informações, consulte elemento Function (SSDL).For more information, see Function Element (SSDL).

Observação

Se você não mapear todas as três das operações de inserção, atualização ou exclusão de um tipo de entidade para procedimentos armazenados, as operações não mapeadas falharão se executadas em tempo de execução e uma UpdateException for gerada.If you do not map all three of the insert, update, or delete operations of a entity type to stored procedures, the unmapped operations will fail if executed at runtime and an UpdateException is thrown.

O elemento UpdateFunction pode ser filho do elemento ModificationFunctionMapping e aplicado ao elemento EntityTypeMapping.The UpdateFunction element can be a child of the ModificationFunctionMapping element and applied to the EntityTypeMapping element.

O elemento UpdateFunction pode ter os seguintes elementos filho:The UpdateFunction element can have the following child elements:

  • AssociationEnd (zero ou mais)AssociationEnd (zero or more)
  • ComplexProperty (zero ou mais)ComplexProperty (zero or more)
  • Resultbinding (zero ou um)ResultBinding (zero or one)
  • ScarlarProperty (zero ou mais)ScarlarProperty (zero or more)

Atributos aplicáveisApplicable Attributes

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento UpdateFunction .The following table describes the attributes that can be applied to the UpdateFunction element.

Nome do atributoAttribute Name ObrigatórioIs Required ValorValue
FunctionNameFunctionName SimYes O nome qualificado do namespace do procedimento armazenado para o qual a função Update é mapeada.The namespace-qualified name of the stored procedure to which the update function is mapped. O procedimento armazenado deve ser declarado no modelo de armazenamento.The stored procedure must be declared in the storage model.
RowsAffectedParameterRowsAffectedParameter NãoNo O nome do parâmetro de saída que retorna o número de linhas afetadas.The name of the output parameter that returns the number of rows affected.

ExemploExample

O exemplo a seguir é baseado no modelo escolar e mostra o elemento UpdateFunction usado para mapear a função Update do tipo de entidade Person para o procedimento armazenado UpdatePerson .The following example is based on the School model and shows the UpdateFunction element used to map update function of the Person entity type to the UpdatePerson stored procedure. O procedimento armazenado UpdatePerson é declarado no modelo de armazenamento.The UpdatePerson stored procedure is declared in the storage model.

 <EntityTypeMapping TypeName="SchoolModel.Person">
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName" />
       <ScalarProperty Name="LastName" ParameterName="LastName" />
       <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
     </InsertFunction>
     <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate"
                       Version="Current" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate"
                       Version="Current" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName"
                       Version="Current" />
       <ScalarProperty Name="LastName" ParameterName="LastName"
                       Version="Current" />
       <ScalarProperty Name="PersonID" ParameterName="PersonID"
                       Version="Current" />
     </UpdateFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
       <ScalarProperty Name="PersonID" ParameterName="PersonID" />
     </DeleteFunction>
   </ModificationFunctionMapping>
 </EntityTypeMapping>