Especificação CSDL

Observação

O CSDL v1 não é suportado, por favor atualize para a V3

A linguagem de definição de esquemas conceptuais (CSDL) é uma linguagem baseada em XML que descreve as entidades, relações e funções que compõem um modelo conceptual de uma aplicação orientada por dados. Este modelo conceptual pode ser utilizado pelo Entity Framework ou WCF Data Services. Os metadados descritos com a CSDL são usados pelo Entity Framework para mapear entidades e relações definidas num modelo conceptual para uma fonte de dados. Para mais informações, consulte Especificação SSDL e Especificação MSL.

O CSDL é a implementação do Modelo de Entidade de Dados (Entity Data Model) no Entity Framework.

Numa aplicação Entity Framework, os metadados conceptuais do modelo são carregados a partir de um ficheiro .csdl (escrito em CSDL) para uma instância do System.Data.Metadata.Edm.EdmEdmItemCollection e são acessíveis usando métodos na classe System.Data.Metadata.Edm.MetadataWorkspace. O Entity Framework utiliza metadados conceptuais do modelo para traduzir consultas contra o modelo conceptual para comandos específicos da fonte de dados.

O EF Designer armazena informação conceptual do modelo num ficheiro .edmx no momento do design. Em tempo de compilação, o EF Designer utiliza informação num ficheiro .edmx para criar o ficheiro .csdl necessário pelo Entity Framework em tempo de execução.

As versões do CSDL são diferenciadas por espaços de nomes XML.

Versão CSDL Espaço de Nomes XML
CSDL v1 https://schemas.microsoft.com/ado/2006/04/edm
CSDL v2 https://schemas.microsoft.com/ado/2008/09/edm
CSDL v3 https://schemas.microsoft.com/ado/2009/11/edm

Elemento de Associação (CSDL)

Um elemento de Associação define uma relação entre dois tipos de entidades. Uma associação deve especificar os tipos de entidades envolvidos na relação e o número possível de tipos de entidades em cada extremidade da relação, o que é conhecido como multiplicidade. A multiplicidade de um fim de associação pode ter um valor de um (1), zero ou um (0..1), ou muitos (*). Esta informação é especificada em dois elementos End filhos.

Instâncias de tipo entidade numa das extremidades de uma associação podem ser acedidas através de propriedades de navegação ou chaves estrangeiras, se estiverem expostas num tipo de entidade.

Numa aplicação, uma instância de associação representa uma associação específica entre instâncias de tipos de entidade. As instâncias de associação são logicamente agrupadas num conjunto de associações.

Um elemento de Associação pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento)
  • Fim (exatamente 2 elementos)
  • ReferentialConstraint (zero ou um elemento)
  • Elementos de anotação (zero ou mais elementos)

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento Associação .

Nome do atributo é obrigatório Valor
Nome Sim O nome da associação.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento Associação . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento Associação que define a associação CustomerOrders quando as chaves estrangeiras não são expostas nos tipos de entidade Customer e Order. Os valores de multiplicidade para cada Extremidade da associação indicam que muitas Encomendas podem ser associadas a um Cliente, mas apenas um Cliente pode estar associado a uma Encomenda. Adicionalmente, o elemento OnDelete indica que todas as Encomendas relacionadas com um determinado Cliente e que tenham sido carregadas no ObjectContext serão eliminadas se o Cliente for eliminado.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
 </Association>

 

O exemplo seguinte mostra um elemento Association que define a associação CustomerOrders quando chaves estrangeiras foram expostas nos tipos de entidade Customer e Order. Com chaves estrangeiras expostas, a relação entre as entidades é gerida com um elemento ReferentialConstraint . Um elemento correspondente de AssociationSetMapping não é necessário para mapear esta associação à fonte de dados.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
   <ReferentialConstraint>
        <Principal Role="Customer">
            <PropertyRef Name="Id" />
        </Principal>
        <Dependent Role="Order">
             <PropertyRef Name="CustomerId" />
         </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Elemento AssociationSet (CSDL)

O elemento AssociationSet na linguagem de definição de esquemas conceptuais (CSDL) é um contentor lógico para instâncias de associação do mesmo tipo. Um conjunto de associação fornece uma definição para agrupar instâncias de associação para que possam ser mapeadas para uma fonte de dados.  

O elemento AssociationSet pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento permitido)
  • Fim (exatamente dois elementos necessários)
  • Elementos de anotação (zero ou mais elementos permitidos)

O atributo Associação especifica o tipo de associação que um conjunto de associação contém. Os conjuntos de entidades que compõem as extremidades de um conjunto de associação são especificados com exatamente dois elementos filhos End.

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento AssociationSet .

Nome do atributo é obrigatório Valor
Nome Sim O nome do conjunto de entidades. O valor do atributo Nome não pode ser o mesmo que o valor do atributo Associação .
Associação Sim O nome totalmente qualificado da associação, da qual o conjunto de associações contém instâncias. A associação deve estar no mesmo namespace do conjunto de associações.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento AssociationSet . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento EntityContainer com dois elementos AssociationSet :

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

Elemento CollectionType (CSDL)

O elemento CollectionType na linguagem de definição de esquema conceptual (CSDL) especifica que um parâmetro de função ou tipo de retorno de função é uma coleção. O elemento CollectionType pode ser filho do elemento Parameter ou do elemento ReturnType (Função). O tipo de coleção pode ser especificado usando o atributo Type ou um dos seguintes elementos filhos:

  • CollectionType
  • Tipo de Referência
  • RowType
  • TypeRef

Observação

Um modelo não irá validar se o tipo de uma coleção for especificado tanto com o atributo Type como com um elemento filho.

 

Atributos Aplicáveis

A tabela seguinte descreve os atributos que podem ser aplicados ao elemento CollectionType . Note que os atributos DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode e Collation são apenas aplicáveis a coleções de EDMSimpleTypes.

Nome do atributo é obrigatório Valor
Type No O tipo da coleção.
Anulável No Verdadeiro (o valor padrão) ou Falso , dependendo se a propriedade pode ter um valor nulo.
[!NOTA]
> Na CSDL v1, uma propriedade de tipo complexo deve ter Nullable="False".
DefaultValue No O valor padrão da propriedade.
MaxLength No O comprimento máximo do valor da propriedade.
Comprimento Fixo No Verdadeiro ou Falso dependendo se o valor da propriedade será armazenado como uma cadeia de comprimento fixo.
Precisão No A precisão do valor da propriedade.
Scale No A escala do valor da propriedade.
SRID No Identificador de Referência do Sistema Espacial. Válido apenas para propriedades de tipos espaciais.   Para mais informações, consulte SRID e SRID (SQL Server)
Unicode No Verdadeiro ou Falso dependendo se o valor da propriedade será armazenado como uma cadeia Unicode.
Collation No Uma cadeia que especifica a sequência de compilação a ser usada na fonte de dados.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento CollectionType . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra uma função definida por modelo que utiliza um elemento CollectionType para especificar que a função devolve uma coleção de tipos de entidades Person (conforme especificado com o atributo ElementType ).

 <Function Name="LastNamesAfter">
        <Parameter Name="someString" Type="Edm.String"/>
        <ReturnType>
             <CollectionType  ElementType="SchoolModel.Person"/>
        </ReturnType>
        <DefiningExpression>
             SELECT VALUE p
             FROM SchoolEntities.People AS p
             WHERE p.LastName >= someString
        </DefiningExpression>
 </Function>

 

O exemplo seguinte mostra uma função definida pelo modelo que utiliza um elemento CollectionType para especificar que a função devolve uma coleção de linhas (conforme especificado no elemento RowType ).

 <Function Name="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

 

O exemplo seguinte mostra uma função definida pelo modelo que utiliza o elemento CollectionType para especificar que a função aceita como parâmetro uma coleção de tipos de entidades departamentais .

 <Function Name="GetAvgBudget">
      <Parameter Name="Departments">
          <CollectionType>
             <TypeRef Type="SchoolModel.Department"/>
          </CollectionType>
           </Parameter>
       <ReturnType Type="Collection(Edm.Decimal)"/>
       <DefiningExpression>
             SELECT VALUE AVG(d.Budget) FROM Departments AS d
       </DefiningExpression>
 </Function>

 

 

Elemento ComplexType (CSDL)

Um elemento ComplexType define uma estrutura de dados composta por propriedades EdmSimpleType ou outros tipos complexos.  Um tipo complexo pode ser uma propriedade de um tipo de entidade ou de outro tipo complexo. Um tipo complexo é semelhante a um tipo de entidade no sentido em que um tipo complexo define dados. No entanto, existem algumas diferenças importantes entre tipos complexos e tipos de entidade:

  • Os tipos complexos não têm identidades (ou chaves) e, portanto, não podem existir de forma independente. Os tipos complexos só podem existir como propriedades de tipos de entidade ou outros tipos complexos.
  • Tipos complexos não podem participar em associações. Nenhuma das extremidades de uma associação pode ser de tipo complexo e, portanto, as propriedades de navegação não podem ser definidas para tipos complexos.
  • Uma propriedade de tipo complexo não pode ter um valor nulo, embora as propriedades escalares de um tipo complexo possam ser definidas como nulas.

Um elemento ComplexType pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento)
  • Propriedade (zero ou mais elementos)
  • Elementos de anotação (zero ou mais elementos)

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento ComplexType .

Nome do atributo é obrigatório Valor
Nome Sim O nome do tipo complexo. O nome de um tipo complexo não pode ser o mesmo que o nome de outro tipo complexo, tipo de entidade ou associação que esteja dentro do âmbito do modelo.
Tipo Base No O nome de outro tipo complexo que é o tipo base do tipo complexo que está a ser definido.
[!NOTA]
> Este atributo não é aplicável na CSDL v1. A herança para tipos complexos não é suportada nessa versão.
Resumo No Verdadeiro ou Falso (o valor padrão), dependendo se o tipo complexo é um tipo abstrato.
[!NOTA]
> Este atributo não é aplicável na CSDL v1. Tipos complexos nessa versão não podem ser tipos abstratos.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento ComplexType . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um tipo complexo, Morada, com as propriedades EdmSimpleTypeRua,Cidade, EstadoOrProvíncia, País e Código Postal.

 <ComplexType Name="Address" >
   <Property Type="String" Name="StreetAddress" Nullable="false" />
   <Property Type="String" Name="City" Nullable="false" />
   <Property Type="String" Name="StateOrProvince" Nullable="false" />
   <Property Type="String" Name="Country" Nullable="false" />
   <Property Type="String" Name="PostalCode" Nullable="false" />
 </ComplexType>

 

Para definir o tipo complexo Endereço (acima) como uma propriedade de um tipo de entidade, deve declarar o tipo de propriedade na definição do tipo de entidade. O exemplo seguinte mostra a propriedade Endereço como um tipo complexo num tipo de entidade (Editor):

 <EntityType Name="Publisher">
       <Key>
         <PropertyRef Name="Id" />
       </Key>
       <Property Type="Int32" Name="Id" Nullable="false" />
       <Property Type="String" Name="Name" Nullable="false" />
       <Property Type="BooksModel.Address" Name="Address" Nullable="false" />
       <NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
                           FromRole="Publisher" ToRole="Book" />
     </EntityType>

 

 

Elemento DefiningExpression (CSDL)

O elemento DefiningExpression na linguagem de definição de esquemas conceptuais (CSDL) contém uma expressão SQL de Entidade que define uma função no modelo conceptual.  

Observação

Para efeitos de validação, um elemento DefiningExpression pode conter conteúdo arbitrário. No entanto, o Entity Framework lançará uma exceção em tempo de execução se um elemento DefiningExpression não contiver SQL Entity válido.

 

Atributos Aplicáveis

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento DefiningExpression . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

Exemplo

O exemplo seguinte utiliza um elemento DefiningExpression para definir uma função que devolve o número de anos desde a publicação de um livro. O conteúdo do elemento DefiningExpression está escrito em Entity SQL.

 <Function Name="GetYearsInPrint" ReturnType="Edm.Int32" >
       <Parameter Name="book" Type="BooksModel.Book" />
       <DefiningExpression>
         Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
       </DefiningExpression>
     </Function>

 

 

Elemento Dependente (CSDL)

O elemento dependente na linguagem de definição de esquemas conceptuais (CSDL) é um elemento filho do elemento ReferentialConstraint e define a extremidade dependente de uma restrição referencial. Um elemento ReferentialConstraint define funcionalidades semelhantes a uma restrição de integridade referencial numa base de dados relacional. Da mesma forma que uma coluna (ou colunas) de uma tabela de base de dados pode referenciar a chave primária de outra tabela, uma propriedade (ou propriedades) de um tipo de entidade pode referenciar a chave de entidade de outro tipo de entidade. O tipo de entidade referenciado é chamado de extremidade principal da restrição. O tipo de entidade que faz referência à extremidade principal é chamado de extremidade dependente da restrição. Os elementos PropertyRef são usados para especificar quais as chaves que referenciam a extremidade principal.

O elemento Dependente pode ter os seguintes elementos filhos (na ordem listada):

  • PropertyRef (um ou mais elementos)
  • Elementos de anotação (zero ou mais elementos)

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento dependente .

Nome do atributo é obrigatório Valor
Função Sim O nome do tipo de entidade na extremidade dependente da associação.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento Dependente . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento ReferentialConstraint a ser usado como parte da definição da associação PublishedBy . A propriedade PublisherId do tipo de entidade Book constitui a extremidade dependente da restrição referencial.

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Elemento de Documentação (CSDL)

O elemento Documentação na linguagem de definição de esquemas conceptuais (CSDL) pode ser usado para fornecer informação sobre um objeto definido num elemento pai. Num ficheiro .edmx, quando o elemento Documentação é filho de um elemento que aparece como objeto na superfície de design do EF Designer (como uma entidade, associação ou propriedade), o conteúdo do elemento Documentação aparecerá na janela de Propriedades do Visual Studio para o objeto.

O elemento Documentação pode ter os seguintes elementos filhos (na ordem indicada):

  • Resumo: Uma breve descrição do elemento principal. (zero ou um elemento)
  • LongDescription: Uma descrição extensa do elemento pai. (zero ou um elemento)
  • Elementos de anotação. (zero ou mais elementos)

Atributos Aplicáveis

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento Documentação . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

Exemplo

O exemplo seguinte mostra o elemento Documentação como um elemento filho de um elemento EntityType. Se o excerto abaixo estivesse no conteúdo CSDL de um ficheiro .edmx, o conteúdo dos elementos Summary e LongDescription apareceria na janela de Propriedades do Visual Studio ao clicar no Customer tipo de entidade.

 <EntityType Name="Customer">
    <Documentation>
      <Summary>Summary here.</Summary>
      <LongDescription>Long description here.</LongDescription>
    </Documentation>
    <Key>
      <PropertyRef Name="CustomerId" />
    </Key>
    <Property Type="Int32" Name="CustomerId" Nullable="false" />
    <Property Type="String" Name="Name" Nullable="false" />
 </EntityType>

 

 

Elemento Final (CSDL)

O elemento End na linguagem de definição de esquemas conceptuais (CSDL) pode ser um filho do elemento Association ou do elemento AssociationSet. Em cada caso, o papel do elemento End é diferente e os atributos aplicáveis são diferentes.

Elemento Final como Filho do Elemento de Associação

Um elemento End (como filho do elemento Association ) identifica o tipo de entidade numa extremidade de uma associação e o número de instâncias de tipo de entidade que podem existir nessa extremidade de uma associação. Os pontos de associação são definidos como parte de uma associação; uma associação deve ter exatamente dois pontos de associação. As instâncias de tipo de entidade numa das extremidades de uma associação podem ser acedidas através de propriedades de navegação ou chaves estrangeiras se estiverem expostas num tipo de entidade.  

Um elemento End pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento)
  • OnDelete (zero ou um elemento)
  • Elementos de anotação (zero ou mais elementos)

Atributos Aplicáveis

A tabela seguinte descreve os atributos que podem ser aplicados ao elemento End quando este é filho de um elemento de Associação .

Nome do atributo é obrigatório Valor
Type Sim O nome do tipo de entidade numa das extremidades da associação.
Função No Um nome para o fim da associação. Se não for fornecido o nome, será utilizado o nome do tipo de entidade na extremidade da associação.
Multiplicidade Sim 1, 0..1, ou * dependendo do número de instâncias do tipo de entidade que podem estar no final da associação.
1 indica que existe exatamente uma instância única de tipo de entidade na extremidade da associação.
0..1 indica que existem instâncias do tipo zero ou de um tipo de entidade na extremidade da associação.
* indica que existem instâncias de tipo de entidade zero, uma ou mais na extremidade da associação.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento End . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento Associação que define a Associação CustomerOrders. Os valores de multiplicidade para cada Extremidade da associação indicam que muitas Encomendas podem ser associadas a um Cliente, mas apenas um Cliente pode estar associado a uma Encomenda. Além disso, o elemento OnDelete indica que todas as Encomendas relacionadas com um determinado Cliente e que tenham sido carregadas no ObjectContext serão eliminadas se o Cliente for eliminado.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" />
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*">
         <OnDelete Action="Cascade" />
   </End>
 </Association>

 

Elemento final como filho do elemento AssociationSet

O elemento End especifica uma extremidade de um conjunto de associação. O elemento AssociationSet deve conter dois elementos End . A informação contida num elemento End é usada para mapear um conjunto de associações para uma fonte de dados.

Um elemento End pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento)
  • Elementos de anotação (zero ou mais elementos)

Observação

Os elementos de anotação devem aparecer depois de todos os outros elementos filhos. Elementos de anotação só são permitidos no CSDL v2 e versões posteriores.

 

Atributos Aplicáveis

A tabela seguinte descreve os atributos que podem ser aplicados ao elemento End quando este é filho de um elemento AssociationSet .

Nome do atributo é obrigatório Valor
EntitySet Sim O nome do elemento EntitySet que define uma extremidade do elemento AssociationSet pai. O elemento EntitySet deve ser definido no mesmo contentor de entidade que o elemento AssociationSet pai.
Função No O nome da associação definiu o fim. Se o atributo Role não for utilizado, o nome do fim do conjunto de associação será o nome do conjunto de entidades.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento End . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento EntityContainer com dois elementos AssociationSet , cada um com dois elementos End :

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

Elemento EntityContainer (CSDL)

O elemento EntityContainer na linguagem de definição de esquema conceptual (CSDL) é um contentor lógico para conjuntos de entidades, conjuntos de associação e importações de funções. Um contentor de entidade no modelo conceptual é mapeado para um contentor de entidade no modelo de armazenamento através do elemento EntityContainerMapping. Um contentor de entidade de modelo de armazenamento descreve a estrutura da base de dados: conjuntos de entidades descrevem tabelas, conjuntos de associação descrevem restrições de chave estrangeira, e importações de funções descrevem procedimentos armazenados numa base de dados.

Um elemento EntityContainer pode ter zero ou um elemento de Documentação. Se estiver presente um elemento de Documentação , deve preceder todos os elementos EntitySet, AssociationSet e FunctionImport .

Um elemento EntityContainer pode ter zero ou mais dos seguintes elementos filhos (na ordem indicada):

  • Conjunto de Entidades
  • AssociationSet
  • FunctionImport
  • Elementos de anotação

Pode estender um elemento EntityContainer para incluir o conteúdo de outro EntityContainer que esteja dentro do mesmo namespace. Para incluir o conteúdo de outro EntityContainer, no elemento EntityContainer de referência, defina o valor do atributo Extends para o nome do elemento EntityContainer que pretende incluir. Todos os elementos filhos do elemento EntityContainer incluído serão tratados como elementos filhos do elemento EntityContainer referenciador.

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento Using.

Nome do atributo é obrigatório Valor
Nome Sim O nome do container da entidade.
Estende No O nome de outro contentor de entidade dentro do mesmo espaço de nomes.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento EntityContainer . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento EntityContainer que define três conjuntos de entidades e dois conjuntos de associação.

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

Elemento EntitySet (CSDL)

O elemento EntitySet na linguagem de definição de esquemas conceptuais é um contentor lógico para instâncias de um tipo de entidade e instâncias de qualquer tipo que derive desse tipo de entidade. A relação entre um tipo de entidade e um conjunto de entidades é análoga à relação entre uma linha e uma tabela numa base de dados relacional. Tal como uma linha, um tipo de entidade define um conjunto de dados relacionados e, tal como uma tabela, um conjunto de entidades contém instâncias dessa definição. Um conjunto de entidades fornece um construto para agrupar instâncias de tipos de entidade, de modo a que possam ser mapeadas para estruturas de dados relacionadas numa fonte de dados.  

Podem ser definidos mais do que um conjunto de entidades para um determinado tipo de entidade.

Observação

O EF Designer não suporta modelos conceptuais que contenham múltiplos conjuntos de entidades por tipo.

 

O elemento EntitySet pode ter os seguintes elementos filhos (na ordem listada):

  • Elemento de Documentação (zero ou um elementos permitidos)
  • Elementos de anotação (zero ou mais elementos permitidos)

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento EntitySet .

Nome do atributo é obrigatório Valor
Nome Sim O nome do conjunto de entidades.
EntityType Sim O nome totalmente qualificado do tipo de entidade para o qual o conjunto de entidades contém instâncias.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento EntitySet . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento EntityContainer com três elementos EntitySet :

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

É possível definir vários conjuntos de entidades por tipo (MEST). O exemplo seguinte define um contentor de entidade com dois conjuntos de entidades para o tipo de entidade Book :

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="FictionBooks" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="BookAuthor" Association="BooksModel.BookAuthor">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

Elemento EntityType (CSDL)

O elemento EntityType representa a estrutura de um conceito de topo, como um cliente ou uma encomenda, num modelo conceptual. Um tipo de entidade é um modelo para instâncias de tipos de entidade numa aplicação. Cada modelo contém as seguintes informações:

  • Um nome único. (Obrigatório.)
  • Uma chave de entidade definida por uma ou mais propriedades. (Obrigatório.)
  • Propriedades para conter dados. (Opcional.)
  • Propriedades de navegação que permitem a navegação de uma extremidade de uma associação para a outra. (Opcional.)

Em um aplicativo, uma instância de um tipo de entidade representa um objeto específico (como um cliente ou pedido específico). Cada instância de um tipo de entidade deve ter uma chave de entidade única dentro de um conjunto de entidades.

Duas instâncias de tipo de entidade são consideradas iguais somente se forem do mesmo tipo e os valores de suas chaves de entidade forem os mesmos.

Um elemento EntityType pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento)
  • Chave (zero ou um elemento)
  • Propriedade (zero ou mais elementos)
  • NavigationProperty (zero ou mais elementos)
  • Elementos de anotação (zero ou mais elementos)

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento EntityType .

Nome do atributo é obrigatório Valor
Nome Sim O nome do tipo de entidade.
BaseType No O nome de outro tipo de entidade que é o tipo base do tipo de entidade que está a ser definido.
Abstrato No Verdadeiro ou Falso, dependendo se o tipo de entidade é um tipo abstrato.
OpenType No Verdadeiro ou Falso , dependendo se o tipo de entidade é aberto.
[!NOTA]
> O atributo OpenType é aplicável apenas a tipos de entidades definidos em modelos conceptuais usados com ADO.NET Serviços de Dados.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento EntityType . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento EntityType com três elementos Property e dois elementos NavigationProperty :

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

 

Elemento EnumType (CSDL)

O elemento EnumType representa um tipo enumerado.

Um elemento EnumType pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento)
  • Membro (zero ou mais elementos)
  • Elementos de anotação (zero ou mais elementos)

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento EnumType .

Nome do atributo é obrigatório Valor
Nome Sim O nome do tipo de entidade.
IsFlags No Verdadeiro ou Falso, dependendo se o tipo enum pode ser usado como um conjunto de flags. O valor padrão é Falso...
SubjacenteTipo No Edm.Byte, Edm.Int16, Edm.Int32, Edm.Int64 ou Edm.SByte definem o intervalo de valores do tipo.   O tipo subjacente padrão de elementos de enumeração é Edm.Int32..

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento EnumType . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento EnumType com três elementos Membro :

 <EnumType Name="Color" IsFlags=”false” UnderlyingTyp=”Edm.Byte”>
   <Member Name="Red" />
   <Member Name="Green" />
   <Member Name="Blue" />
 </EntityType>

 

 

Elemento de Função (CSDL)

O elemento Função na linguagem de definição de esquemas conceptuais (CSDL) é usado para definir ou declarar funções no modelo conceptual. Uma função é definida usando um elemento DefiningExpression.  

Um elemento de função pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento)
  • Parâmetro (zero ou mais elementos)
  • DefiningExpression (zero ou um elemento)
  • ReturnType (Função) (zero ou um elemento)
  • Elementos de anotação (zero ou mais elementos)

Um tipo de retorno para uma função deve ser especificado com o elemento ReturnType (Função) ou com o atributo ReturnType (ver abaixo), mas não ambos. Os tipos possíveis de retorno são qualquer EdmSimpleType, tipo de entidade, tipo complexo, tipo de linha ou tipo ref (ou uma coleção de um destes tipos).

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento Função .

Nome do atributo é obrigatório Valor
Nome Sim O nome da função.
ReturnType No O tipo devolvido pela função.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento Função . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte utiliza um elemento Função para definir uma função que devolve o número de anos desde que um instrutor foi contratado.

 <Function Name="YearsSince" ReturnType="Edm.Int32">
   <Parameter Name="date" Type="Edm.DateTime" />
   <DefiningExpression>
     Year(CurrentDateTime()) - Year(date)
   </DefiningExpression>
 </Function>

 

 

Elemento FunctionImport (CSDL)

O elemento FunctionImport na linguagem de definição de esquemas conceptuais (CSDL) representa uma função definida na fonte de dados mas disponível para objetos através do modelo conceptual. Por exemplo, um elemento de Função no modelo de armazenamento pode ser usado para representar um procedimento armazenado numa base de dados. Um elemento FunctionImport no modelo conceptual representa a função correspondente numa aplicação Entity Framework e é mapeado para a função do modelo de armazenamento usando o elemento FunctionImportMapping. Quando a função é chamada na aplicação, o procedimento armazenado correspondente é executado na base de dados.

O elemento FunctionImport pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento permitido)
  • Parâmetro (zero ou mais elementos permitidos)
  • Elementos de anotação (zero ou mais elementos permitidos)
  • ReturnType (FunctionImport) (zero ou mais elementos permitidos)

Deve ser definido um elemento de parâmetro para cada parâmetro que a função aceite.

Um tipo de retorno para uma função deve ser especificado com o elemento ReturnType (FunctionImport) ou com o atributo ReturnType (ver abaixo), mas não com ambos. O valor do return type deve ser uma coleção de EdmSimpleType, EntityType ou ComplexType.

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento FunctionImport .

Nome do atributo é obrigatório Valor
Nome Sim O nome da função importada.
ReturnType No O tipo que a função devolve. Não use este atributo se a função não devolver um valor. Caso contrário, o valor deve ser uma coleção de ComplexType, EntityType ou EDMSimpleType.
EntitySet No Se a função devolver uma coleção de tipos de entidades, o valor do EntitySet deve ser o conjunto de entidades ao qual a coleção pertence. Caso contrário, o atributo EntitySet não deve ser utilizado.
IsComposable No Se o valor for definido como verdadeiro, a função é componível (Função com valores de tabela) e pode ser usada numa consulta LINQ.  O padrão é false.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento FunctionImport . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento FunctionImport que aceita um parâmetro e devolve uma coleção de tipos de entidades:

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

 

 

Elemento-Chave (CSDL)

O elemento Chave é um elemento filho do elemento EntityType e define uma chave de entidade (uma propriedade ou um conjunto de propriedades de um tipo de entidade que determinam a identidade). As propriedades que compõem uma chave de entidade são escolhidas na fase de conceção. Os valores das propriedades da chave de entidade devem identificar de forma única uma instância de tipo de entidade dentro de um conjunto de entidades em tempo de execução. As propriedades que compõem uma chave de entidade devem ser escolhidas para garantir a exclusividade das instâncias em um conjunto de entidades. O elemento Chave define uma chave de entidade referenciando uma ou mais propriedades de um tipo de entidade.

O elemento chave pode ter os seguintes elementos filhos:

  • PropertyRef (um ou mais elementos)
  • Elementos de anotação (zero ou mais elementos)

Atributos Aplicáveis

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento Chave . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

Exemplo

O exemplo abaixo define um tipo de entidade chamado Livro. A chave de entidade é definida pela referência à propriedade ISBN do tipo de entidade.

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

A propriedade ISBN é uma boa escolha para a chave da entidade porque um Número Padrão Internacional de Livro (ISBN) identifica de forma única um livro.

O exemplo seguinte mostra um tipo de entidade (Autor) que possui uma chave de entidade composta por duas propriedades, Nome e Endereço.

 <EntityType Name="Author">
   <Key>
     <PropertyRef Name="Name" />
     <PropertyRef Name="Address" />
   </Key>
   <Property Type="String" Name="Name" Nullable="false" />
   <Property Type="String" Name="Address" Nullable="false" />
   <NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
                       FromRole="Author" ToRole="Book" />
 </EntityType>

 

Usar Nome e Endereço para a chave da entidade é uma escolha razoável, pois é improvável que dois autores com o mesmo nome vivam no mesmo endereço. No entanto, essa escolha para uma chave de entidade não garante absolutamente chaves de entidade exclusivas em um conjunto de entidades. Adicionar uma propriedade, como o AuthorId, que possa ser usada para identificar de forma única um autor seria recomendado neste caso.

 

Elemento Membro (CSDL)

O elemento Member é um elemento filho do elemento EnumType e define um membro do tipo enumerado.

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento FunctionImport .

Nome do atributo é obrigatório Valor
Nome Sim O nome do membro.
Value No O valor do membro. Por defeito, o primeiro membro tem o valor 0, e o valor de cada enumerador sucessivo é incrementado em 1. Podem existir múltiplos membros com os mesmos valores.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento FunctionImport . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento EnumType com três elementos Membro :

 <EnumType Name="Color">
   <Member Name="Red" Value=”1”/>
   <Member Name="Green" Value=”3” />
   <Member Name="Blue" Value=”5”/>
 </EntityType>

 

 

Um elemento NavigationProperty define uma propriedade de navegação, que fornece uma referência para a outra extremidade de uma associação. Ao contrário das propriedades definidas com o elemento Property, as propriedades de navegação não definem a forma e as características dos dados. Proporcionam uma forma de navegar por uma associação entre dois tipos de entidades.

Tenha em atenção que as propriedades de navegação são opcionais em ambos os tipos de entidade nas extremidades de uma associação. Se você definir uma propriedade de navegação em um tipo de entidade no final de uma associação, não será necessário definir uma propriedade de navegação no tipo de entidade na outra extremidade da associação.

O tipo de dado devolvido por uma propriedade de navegação é determinado pela multiplicidade do seu extremo de associação remota. Por exemplo, suponha que existe uma propriedade de navegação, OrdersNavProp, num tipo de entidade Cliente e navega numa associação um-para-muitos entre Cliente e Encomenda. Como a extremidade remota de associação para a propriedade de navegação tem multiplicidade muitos (*), o seu tipo de dado é uma coleção (de Order). De forma semelhante, se existir uma propriedade de navegação, CustomerNavProp, no tipo de entidade Ordem, o seu tipo de dados será Customer, pois a multiplicidade da extremidade remota é um (1).

Um elemento NavigationProperty pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento)
  • Elementos de anotação (zero ou mais elementos)

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento NavigationProperty .

Nome do atributo é obrigatório Valor
Nome Sim O nome da propriedade de navegação.
Relacionamento Sim O nome de uma associação que está dentro do âmbito do modelo.
ToRole Sim O fim da associação onde a navegação termina. O valor do atributo ToRole deve ser o mesmo que o valor de um dos atributos Role definidos numa das extremidades da associação (definido no elemento AssociationEnd).
FromRole Sim O fim da associação a partir do qual a navegação começa. O valor do atributo FromRole deve ser o mesmo que o valor de um dos atributos Role definidos numa das extremidades da associação (definido no elemento AssociationEnd).

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento NavigationProperty . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte define um tipo de entidade (Livro) com duas propriedades de navegação (PublishedBy e WrittenBy):

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

 

Elemento OnDelete (CSDL)

O elemento OnDelete na linguagem de definição de esquemas conceptuais (CSDL) define um comportamento que está ligado a uma associação. Se o atributo Action for definido para Cascata numa extremidade de uma associação, os tipos de entidades relacionadas na outra extremidade da associação são eliminados quando o tipo de entidade na primeira extremidade é eliminado. Se a associação entre dois tipos de entidade for uma relação de chave primária para chave primária, então um objeto dependente carregado é apagado quando o objeto principal na outra extremidade da associação é apagado, independentemente da especificação OnDelete.  

Observação

O elemento OnDelete afeta apenas o comportamento em tempo de execução de uma aplicação; não afeta o comportamento na fonte de dados. O comportamento definido na fonte de dados deve ser o mesmo que o comportamento definido na aplicação.

 

Um elemento OnDelete pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento)
  • Elementos de anotação (zero ou mais elementos)

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento OnDelete .

Nome do atributo é obrigatório Valor
Action Sim Cascata ou Nenhuma. Se for em cascata, os tipos de entidade dependente serão eliminados quando o tipo de entidade principal for eliminado. Se não houver nenhum, os tipos de entidade dependentes não serão eliminados quando o tipo principal de entidade for eliminado.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento Associação . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento Associação que define a Associação CustomerOrders. O elemento OnDelete indica que todas as Encomendas relacionadas com um determinado Cliente e que tenham sido carregadas no ObjectContext serão eliminadas quando o Cliente for eliminado.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1">
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
 </Association>

 

 

Elemento de Parâmetro (CSDL)

O elemento Parameter na linguagem de definição de esquema conceptual (CSDL) pode ser um filho do elemento FunctionImport ou do elemento Function.

Aplicação do Elemento FunctionImport

Um elemento Parameter (como filho do elemento FunctionImport ) é usado para definir parâmetros de entrada e saída para importações de funções que são declaradas em CSDL.

O elemento Parameter pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento permitido)
  • Elementos de anotação (zero ou mais elementos permitidos)

Atributos Aplicáveis

A tabela seguinte descreve os atributos que podem ser aplicados ao elemento Parâmetro .

Nome do atributo é obrigatório Valor
Nome Sim O nome do parâmetro.
Type Sim O tipo de parâmetro. O valor deve ser um EDMSimpleType ou um tipo complexo que esteja dentro do âmbito do modelo.
Mode No In, Out ou InOut dependendo se o parâmetro é de entrada, saída ou entrada/saída.
MaxLength No O comprimento máximo permitido do parâmetro.
Precisão No A precisão do parâmetro.
Scale No A escala do parâmetro.
SRID No Identificador de Referência do Sistema Espacial. Válido apenas para parâmetros de tipos espaciais. Para mais informações, veja SRID e SRID (SQL Server).

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento Parâmetro . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento FunctionImport com um elemento filho Parâmetro . A função aceita um parâmetro de entrada e devolve uma coleção de tipos de entidades.

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

 

Aplicação de elementos de função

Um elemento Parâmetro (como filho do elemento Função ) define parâmetros para funções que são definidas ou declaradas num modelo conceptual.

O elemento Parameter pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento)
  • CollectionType (zero ou um elemento)
  • ReferenceType (zero ou um elemento)
  • RowType (zero ou um elemento)

Observação

Apenas um dos elementos CollectionType, ReferenceType ou RowType pode ser um elemento filho de um elemento Property .

 

  • Elementos de anotação (zero ou mais elementos permitidos)

Observação

Os elementos de anotação devem aparecer depois de todos os outros elementos filhos. Elementos de anotação só são permitidos no CSDL v2 e versões posteriores.

 

Atributos Aplicáveis

A tabela seguinte descreve os atributos que podem ser aplicados ao elemento Parâmetro .

Nome do atributo é obrigatório Valor
Nome Sim O nome do parâmetro.
Type No O tipo de parâmetro. Um parâmetro pode ser qualquer um dos seguintes tipos (ou coleções destes tipos):
EdmSimpleType
Tipo de entidade
Tipo complexo
Tipo de linha
tipo de referência
Anulável No Verdadeiro (o valor padrão) ou Falso , dependendo se a propriedade pode ter um valor nulo .
DefaultValue No O valor padrão da propriedade.
MaxLength No O comprimento máximo do valor da propriedade.
Comprimento Fixo No Verdadeiro ou Falso dependendo se o valor da propriedade será armazenado como uma cadeia de comprimento fixo.
Precisão No A precisão do valor da propriedade.
Scale No A escala do valor da propriedade.
SRID No Identificador de Referência do Sistema Espacial. Válido apenas para propriedades de tipos espaciais. Para mais informações, veja SRID e SRID (SQL Server).
Unicode No Verdadeiro ou Falso dependendo se o valor da propriedade será armazenado como uma cadeia Unicode.
Collation No Uma cadeia que especifica a sequência de compilação a ser usada na fonte de dados.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento Parâmetro . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento de função que utiliza um elemento filho de parâmetro para definir um parâmetro de função.

 <Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
 <Parameter Name="Instructor" Type="SchoolModel.Person" />
   <DefiningExpression>
   Year(CurrentDateTime()) - Year(cast(Instructor.HireDate as DateTime))
   </DefiningExpression>
 </Function>

 

Elemento Principal (CSDL)

O elemento principal na linguagem de definição de esquemas conceptuais (CSDL) é um elemento filho do elemento ReferentialConstraint que define o fim principal de uma restrição referencial. Um elemento ReferentialConstraint define funcionalidades semelhantes a uma restrição de integridade referencial numa base de dados relacional. Da mesma forma que uma coluna (ou colunas) de uma tabela de base de dados pode referenciar a chave primária de outra tabela, uma propriedade (ou propriedades) de um tipo de entidade pode referenciar a chave de entidade de outro tipo de entidade. O tipo de entidade referenciado é chamado de extremidade principal da restrição. O tipo de entidade que faz referência à extremidade principal é chamado de extremidade dependente da restrição. Os elementos PropertyRef são usados para especificar quais as chaves referenciadas pela extremidade dependente.

O elemento principal pode ter os seguintes elementos filhos (na ordem listada):

  • PropertyRef (um ou mais elementos)
  • Elementos de anotação (zero ou mais elementos)

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento principal .

Nome do atributo é obrigatório Valor
Função Sim O nome do tipo de entidade na extremidade principal da associação.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento Principal . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento ReferentialConstraint que faz parte da definição da associação PublishedBy . A propriedade Id do tipo de entidade Publisher constitui o fim principal da restrição referencial.

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Elemento de Propriedade (CSDL)

O elemento Property na linguagem de definição de esquemas conceptuais (CSDL) pode ser um filho do elemento EntityType, do elemento ComplexType ou do elemento RowType.

Aplicações dos Elementos EntityType e ComplexType

Os elementos de propriedade (como filhos dos elementos EntityType ou ComplexType ) definem a forma e as características dos dados que uma instância de tipo de entidade ou de tipo complexo irá conter. As propriedades num modelo conceptual são análogas às propriedades definidas numa classe. Da mesma forma que as propriedades em uma classe definem a forma da classe e carregam informações sobre objetos, as propriedades em um modelo conceitual definem a forma de um tipo de entidade e carregam informações sobre instâncias de tipo de entidade.

O elemento Propriedade pode ter os seguintes elementos filhos (na ordem listada):

  • Elemento de Documentação (zero ou um elementos permitidos)
  • Elementos de anotação (zero ou mais elementos permitidos)

As seguintes facetas podem ser aplicadas a um elemento de Propriedade : Nullable, DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode, Collation, ConcurrencyMode. As facetas são atributos XML que fornecem informação sobre como os valores das propriedades são armazenados no armazenamento de dados.

Observação

As facetas só podem ser aplicadas às propriedades do tipo EDMSimpleType.

 

Atributos Aplicáveis

A tabela seguinte descreve os atributos que podem ser aplicados ao elemento Property .

Nome do atributo é obrigatório Valor
Nome Sim O nome da propriedade.
Type Sim O tipo de valor da propriedade. O tipo de valor da propriedade deve ser um EDMSimpleType ou um tipo complexo (indicado por um nome totalmente qualificado) que esteja dentro do âmbito do modelo.
Anulável No Verdadeiro (o valor padrão) ou Falso , dependendo se a propriedade pode ter um valor nulo.
[!NOTA]
> Na CSDL v1, uma propriedade de tipo complexo deve ter Nullable="False".
DefaultValue No O valor padrão da propriedade.
MaxLength No O comprimento máximo do valor da propriedade.
Comprimento Fixo No Verdadeiro ou Falso dependendo se o valor da propriedade será armazenado como uma cadeia de comprimento fixo.
Precisão No A precisão do valor da propriedade.
Scale No A escala do valor da propriedade.
SRID No Identificador de Referência do Sistema Espacial. Válido apenas para propriedades de tipos espaciais. Para mais informações, veja SRID e SRID (SQL Server).
Unicode No Verdadeiro ou Falso dependendo se o valor da propriedade será armazenado como uma cadeia Unicode.
Collation No Uma cadeia que especifica a sequência de compilação a ser usada na fonte de dados.
ConcurrencyMode No Nenhum (o valor padrão) ou Fixo. Se o valor for definido como Fixo, o valor da propriedade será utilizado em verificações otimistas de concorrência.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento Property . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento EntityType com três elementos Property :

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

O exemplo seguinte mostra um elemento ComplexType com cinco elementos Property :

 <ComplexType Name="Address" >
   <Property Type="String" Name="StreetAddress" Nullable="false" />
   <Property Type="String" Name="City" Nullable="false" />
   <Property Type="String" Name="StateOrProvince" Nullable="false" />
   <Property Type="String" Name="Country" Nullable="false" />
   <Property Type="String" Name="PostalCode" Nullable="false" />
 </ComplexType>

 

Aplicação do Elemento RowType

Os elementos de propriedade (como filhos de um elemento RowType ) definem a forma e as características dos dados que podem ser passados para ou devolvidos a partir de uma função definida pelo modelo.  

O elemento Propriedade pode conter exatamente um dos seguintes subelementos:

  • TipoDeColecao
  • Tipo de Referência
  • RowType

O elemento Propriedade pode ter qualquer número de elementos de anotação filhos.

Observação

Elementos de anotação só são permitidos no CSDL v2 e versões posteriores.

 

Atributos Aplicáveis

A tabela seguinte descreve os atributos que podem ser aplicados ao elemento Property .

Nome do atributo é obrigatório Valor
Nome Sim O nome da propriedade.
Type Sim O tipo de valor da propriedade.
Anulável No Verdadeiro (o valor padrão) ou Falso , dependendo se a propriedade pode ter um valor nulo.
[!NOTA]
> Em CSDL v1, uma propriedade de tipo complexo deve ter Nullable="False".
DefaultValue No O valor padrão da propriedade.
MaxLength No O comprimento máximo do valor da propriedade.
Comprimento Fixo No Verdadeiro ou Falso dependendo se o valor da propriedade será armazenado como uma cadeia de comprimento fixo.
Precisão No A precisão do valor da propriedade.
Scale No A escala do valor da propriedade.
SRID No Identificador de Referência do Sistema Espacial. Válido apenas para propriedades de tipos espaciais. Para mais informações, veja SRID e SRID (SQL Server).
Unicode No Verdadeiro ou Falso dependendo se o valor da propriedade será armazenado como uma cadeia Unicode.
Collation No Uma cadeia que especifica a sequência de compilação a ser usada na fonte de dados.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento Property . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra elementos de propriedade usados para definir a forma do tipo de retorno de uma função definida pelo modelo.

 <Function Name="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

 

 

Elemento PropertyRef (CSDL)

O elemento PropertyRef na linguagem de definição de esquema conceptual (CSDL) faz referência a uma propriedade de um tipo de entidade para indicar que a propriedade desempenhará uma das seguintes funções:

  • Parte da chave da entidade (uma propriedade ou um conjunto de propriedades de um tipo de entidade que determinam a identidade). Um ou mais elementos PropertyRef podem ser usados para definir uma chave de entidade.
  • O extremo dependente ou principal de uma restrição referencial.

O elemento PropertyRef pode ter apenas elementos de anotação (zero ou mais) como elementos filhos.

Observação

Elementos de anotação só são permitidos no CSDL v2 e versões posteriores.

 

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento PropertyRef .

Nome do atributo é obrigatório Valor
Nome Sim O nome da propriedade referida.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento PropertyRef . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo abaixo define um tipo de entidade (Livro). A chave de entidade é definida pela referência à propriedade ISBN do tipo de entidade.

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

No exemplo seguinte, dois elementos PropertyRef são usados para indicar que duas propriedades (Id e PublisherId) são os extremos principal e dependente de uma restrição referencial.

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Elemento ReferenceType (CSDL)

O elemento ReferenceType na linguagem de definição de esquemas conceptuais (CSDL) especifica uma referência a um tipo de entidade. O elemento ReferenceType pode ser filho dos seguintes elementos:

  • ReturnType (função)
  • Parâmetro
  • TipoDeColecao

O elemento ReferenceType é usado ao definir um parâmetro ou tipo de retorno para uma função.

Um elemento ReferenceType pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento)
  • Elementos de anotação (zero ou mais elementos)

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento ReferenceType .

Nome do atributo é obrigatório Valor
Type Sim O nome do tipo de entidade referenciado.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento ReferenceType . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra o elemento ReferenceType usado como filho de um elemento Parameter numa função definida por modelo que aceita uma referência a um tipo de entidade Person :

 <Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
   <Parameter Name="instructor">
     <ReferenceType Type="SchoolModel.Person" />
   </Parameter>
   <DefiningExpression>
   Year(CurrentDateTime()) - Year(cast(instructor.HireDate as DateTime))
   </DefiningExpression>
 </Function>

 

O exemplo seguinte mostra o elemento ReferenceType usado como filho de um elemento ReturnType (Função) numa função definida pelo modelo que devolve uma referência a um tipo de entidade Person :

 <Function Name="GetPersonReference">
     <Parameter Name="p" Type="SchoolModel.Person" />
     <ReturnType>
         <ReferenceType Type="SchoolModel.Person" />
     </ReturnType>
     <DefiningExpression>
           REF(p)
     </DefiningExpression>
 </Function>

 

 

Elemento de Restrição Referencial (CSDL)

Um elemento ReferentialConstraint na linguagem de definição de esquemas conceptuais (CSDL) define funcionalidades semelhantes a uma restrição de integridade referencial numa base de dados relacional. Da mesma forma que uma coluna (ou colunas) de uma tabela de base de dados pode referenciar a chave primária de outra tabela, uma propriedade (ou propriedades) de um tipo de entidade pode referenciar a chave de entidade de outro tipo de entidade. O tipo de entidade referenciado é chamado de extremidade principal da restrição. O tipo de entidade que faz referência à extremidade principal é chamado de extremidade dependente da restrição.

Se uma chave estrangeira exposta num tipo de entidade faz referência a uma propriedade noutro tipo de entidade, o elemento ReferentialConstraint define uma associação entre os dois tipos de entidade. Como o elemento ReferentialConstraint fornece informação sobre como dois tipos de entidades estão relacionados, não é necessário nenhum elemento correspondente de AssociationSetMapping na linguagem de especificação de mapeamento (MSL). Uma associação entre dois tipos de entidades que não têm chaves estrangeiras expostas deve ter um elemento AssociationSetMapping correspondente para mapear a informação de associação para a fonte de dados.

Se uma chave estrangeira não for exposta num tipo de entidade, o elemento ReferentialConstraint só pode definir uma restrição de chave primária para chave primária entre este tipo de entidade e outro tipo de entidade.

Um elemento ReferentialConstraint pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento)
  • Principal (exatamente um elemento)
  • Dependente (exatamente um elemento)
  • Elementos de anotação (zero ou mais elementos)

Atributos Aplicáveis

O elemento ReferentialConstraint pode ter qualquer número de atributos de anotação (atributos XML personalizados). No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

Exemplo

O exemplo seguinte mostra um elemento ReferentialConstraint a ser usado como parte da definição da associação PublishedBy .

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Elemento ReturnType (Função) (CSDL)

O elemento ReturnType (Função) na linguagem de definição de esquemas conceptuais (CSDL) especifica o tipo de retorno para uma função definida num elemento de Função. Um tipo de retorno de função também pode ser especificado com um atributo ReturnType .

Os tipos de retorno podem ser qualquer EdmSimpleType, tipo de entidade, tipo complexo, tipo de linha, tipo ref ou uma coleção de um destes tipos.

O tipo de retorno de uma função pode ser especificado com o atributo Type do elemento ReturnType (Função), ou com um dos seguintes elementos filhos:

  • TipoDeColecao
  • Tipo de Referência
  • RowType

Observação

O modelo não será validado se especificar um tipo de retorno de função usando tanto o atributo Type do elemento ReturnType (Função) como um dos elementos filhos.

 

Atributos Aplicáveis

A tabela seguinte descreve os atributos que podem ser aplicados ao elemento ReturnType (Função).

Nome do atributo é obrigatório Valor
ReturnType No O tipo devolvido pela função.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento ReturnType (Função). No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte utiliza um elemento Função para definir uma função que devolve o número de anos em que um livro esteve em impressão. Note que o tipo de retorno é especificado pelo atributo Type de um elemento ReturnType (Função).

 <Function Name="GetYearsInPrint">
   <ReturnType Type=="Edm.Int32">
   <Parameter Name="book" Type="BooksModel.Book" />
   <DefiningExpression>
    Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
   </DefiningExpression>
 </Function>

 

 

Elemento ReturnType (FunctionImport) (CSDL)

O elemento ReturnType (FunctionImport) na linguagem de definição de esquema conceptual (CSDL) especifica o tipo de retorno para uma função definida num elemento FunctionImport. Um tipo de retorno de função também pode ser especificado com um atributo ReturnType .

Os tipos de retorno podem ser qualquer coleção de tipo de entidade, tipo complexo ou EdmSimpleType,

O tipo de retorno de uma função é especificado com o atributo Type do elemento ReturnType (FunctionImport).

Atributos Aplicáveis

A tabela seguinte descreve os atributos que podem ser aplicados ao elemento ReturnType (FunctionImport).

Nome do atributo é obrigatório Valor
Type No O tipo que a função devolve. O valor deve ser uma coleção de ComplexType, EntityType ou EDMSimpleType.
EntitySet No Se a função devolver uma coleção de tipos de entidades, o valor do EntitySet deve ser o conjunto de entidades ao qual a coleção pertence. Caso contrário, o atributo EntitySet não deve ser utilizado.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento ReturnType (FunctionImport). No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte utiliza um FunctionImport que devolve livros e editoras. Note que a função devolve dois conjuntos de resultados e, portanto, dois elementos ReturnType (FunctionImport) são especificados.

 <FunctionImport Name="GetBooksAndPublishers">
   <ReturnType Type=="Collection(BooksModel.Book )" EntitySet=”Books”>
   <ReturnType Type=="Collection(BooksModel.Publisher)" EntitySet=”Publishers”>
 </FunctionImport>

 

 

Elemento RowType (CSDL)

Um elemento RowType na linguagem de definição de esquema conceptual (CSDL) define uma estrutura sem nome como um parâmetro ou tipo de retorno para uma função definida no modelo conceptual.

Um elemento RowType pode ser filho dos seguintes elementos:

  • TipoDeColecao
  • Parâmetro
  • ReturnType (função)

Um elemento RowType pode ter os seguintes elementos filhos (na ordem listada):

  • Propriedade (uma ou mais)
  • Elementos de anotação (zero ou mais)

Atributos Aplicáveis

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento RowType . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

Exemplo

O exemplo seguinte mostra uma função definida pelo modelo que utiliza um elemento CollectionType para especificar que a função devolve uma coleção de linhas (conforme especificado no elemento RowType ).

 <Function Name="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

Elemento de Esquema (CSDL)

O elemento Schema é o elemento raiz de uma definição de modelo conceptual. Contém definições para os objetos, funções e recipientes que compõem um modelo conceptual.

O elemento Schema pode conter zero ou mais dos seguintes elementos filhos:

  • Utilizar
  • Contêiner de Entidade
  • Tipo de entidade
  • EnumType
  • Associação
  • Tipo Complexo
  • Função

Um elemento de Esquema pode conter zero ou um elemento de Anotação.

Observação

O elemento Function e os elementos de anotação só são permitidos no CSDL v2 e posteriores.

 

O elemento Schema utiliza o atributo Namespace para definir o namespace para o tipo de entidade, tipo complexo e objetos de associação num modelo conceptual. Dentro de um espaço de nomes, não podem existir dois objetos com o mesmo nome. Os namespaces podem abranger múltiplos elementos de Schema e múltiplos ficheiros .csdl.

Um namespace de modelo conceptual é diferente do namespace XML do elemento Schema . Um namespace conceptual de modelo (conforme definido pelo atributo Namespace ) é um contentor lógico para tipos de entidade, tipos complexos e tipos de associação. O namespace XML (indicado pelo atributo xmlns ) de um elemento Schema é o namespace padrão para elementos filhos e atributos do elemento Schema . Os namespaces XML do formulário https://schemas.microsoft.com/ado/YYYY/MM/edm (onde YYYY e MM representam respetivamente um ano e um mês) são reservados para CSDL. Elementos e atributos personalizados não podem estar em namespaces que tenham esta forma.

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento Esquema .

Nome do atributo é obrigatório Valor
Espaço de nomes Sim O namespace do modelo conceptual. O valor do atributo Namespace é usado para formar o nome totalmente qualificado de um tipo. Por exemplo, se um EntityType chamado Customer estiver no namespace Simple.Example.Model, então o nome totalmente qualificado do EntityType é SimpleExampleModel.Customer.
As seguintes cadeias não podem ser usadas como valor para o atributo Namespace : System, Transient ou Edm. O valor do atributo Namespace não pode ser o mesmo que o valor do atributo Namespace no elemento SSDL Schema.
Alias No Um identificador usado em vez do nome do espaço de nomes. Por exemplo, se um EntityType chamado Customer estiver no namespace Simple.Example.Model e o valor do atributo Alias for Model, então pode utilizar Model.Customer como o nome totalmente qualificado do EntityType.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento Schema . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra um elemento Schema que contém um elemento EntityContainer , dois elementos EntityType e um elemento Association .

 <Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
      xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
      xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
       Namespace="ExampleModel" Alias="Self">
         <EntityContainer Name="ExampleModelContainer">
           <EntitySet Name="Customers"
                      EntityType="ExampleModel.Customer" />
           <EntitySet Name="Orders" EntityType="ExampleModel.Order" />
           <AssociationSet
                       Name="CustomerOrder"
                       Association="ExampleModel.CustomerOrders">
             <End Role="Customer" EntitySet="Customers" />
             <End Role="Order" EntitySet="Orders" />
           </AssociationSet>
         </EntityContainer>
         <EntityType Name="Customer">
           <Key>
             <PropertyRef Name="CustomerId" />
           </Key>
           <Property Type="Int32" Name="CustomerId" Nullable="false" />
           <Property Type="String" Name="Name" Nullable="false" />
           <NavigationProperty
                    Name="Orders"
                    Relationship="ExampleModel.CustomerOrders"
                    FromRole="Customer" ToRole="Order" />
         </EntityType>
         <EntityType Name="Order">
           <Key>
             <PropertyRef Name="OrderId" />
           </Key>
           <Property Type="Int32" Name="OrderId" Nullable="false" />
           <Property Type="Int32" Name="ProductId" Nullable="false" />
           <Property Type="Int32" Name="Quantity" Nullable="false" />
           <NavigationProperty
                    Name="Customer"
                    Relationship="ExampleModel.CustomerOrders"
                    FromRole="Order" ToRole="Customer" />
           <Property Type="Int32" Name="CustomerId" Nullable="false" />
         </EntityType>
         <Association Name="CustomerOrders">
           <End Type="ExampleModel.Customer"
                Role="Customer" Multiplicity="1" />
           <End Type="ExampleModel.Order"
                Role="Order" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="Customer">
               <PropertyRef Name="CustomerId" />
             </Principal>
             <Dependent Role="Order">
               <PropertyRef Name="CustomerId" />
             </Dependent>
           </ReferentialConstraint>
         </Association>
       </Schema>

 

 

Elemento TypeRef (CSDL)

O elemento TypeRef na linguagem de definição de esquema conceptual (CSDL) fornece uma referência a um tipo nomeado existente. O elemento TypeRef pode ser um filho do elemento CollectionType, que é usado para especificar que uma função tem uma coleção como parâmetro ou tipo de retorno.

Um elemento TypeRef pode ter os seguintes elementos filhos (na ordem listada):

  • Documentação (zero ou um elemento)
  • Elementos de anotação (zero ou mais elementos)

Atributos Aplicáveis

A tabela seguinte descreve os atributos que podem ser aplicados ao elemento TypeRef . Note que os atributos DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode e Collation são aplicáveis apenas a EDMSimpleTypes.

Nome do atributo é obrigatório Valor
Type No O nome do tipo referido.
Anulável No Verdadeiro (o valor padrão) ou Falso , dependendo se a propriedade pode ter um valor nulo.
[!NOTA]
> Em CSDL v1, uma propriedade de tipo complexo deve ter Nullable="False".
DefaultValue No O valor padrão da propriedade.
MaxLength No O comprimento máximo do valor da propriedade.
Comprimento Fixo No Verdadeiro ou Falso dependendo se o valor da propriedade será armazenado como uma cadeia de comprimento fixo.
Precisão No A precisão do valor da propriedade.
Scale No A escala do valor da propriedade.
SRID No Identificador de Referência do Sistema Espacial. Válido apenas para propriedades de tipos espaciais. Para mais informações, veja SRID e SRID (SQL Server).
Unicode No Verdadeiro ou Falso dependendo se o valor da propriedade será armazenado como uma cadeia Unicode.
Collation No Uma cadeia que especifica a sequência de compilação a ser usada na fonte de dados.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento CollectionType . No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte mostra uma função definida pelo modelo que utiliza o elemento TypeRef (como filho de um elemento CollectionType ) para especificar que a função aceita uma coleção de tipos de entidades Departamento .

 <Function Name="GetAvgBudget">
      <Parameter Name="Departments">
          <CollectionType>
             <TypeRef Type="SchoolModel.Department"/>
          </CollectionType>
           </Parameter>
       <ReturnType Type="Collection(Edm.Decimal)"/>
       <DefiningExpression>
             SELECT VALUE AVG(d.Budget) FROM Departments AS d
       </DefiningExpression>
 </Function>

 

 

Uso do Elemento (CSDL)

O elemento Using na linguagem de definição de esquemas conceptuais (CSDL) importa o conteúdo de um modelo conceptual que existe num namespace diferente. Ao definir o valor do atributo Namespace , pode referir-se a tipos de entidade, tipos complexos e tipos de associação que são definidos noutro modelo conceptual. Mais do que um elemento Using pode ser filho de um elemento Schema .

Observação

O elemento Using em CSDL não funciona exatamente como uma instrução using numa linguagem de programação. Ao importar um namespace com uma instrução using numa linguagem de programação, não afeta objetos no namespace original. Em CSDL, um namespace importado pode conter um tipo de entidade derivado de um tipo de entidade no namespace original. Isto pode afetar conjuntos de entidades declarados no namespace original.

 

O elemento Using pode ter os seguintes elementos filhos:

  • Documentação (zero ou um elemento permitido)
  • Elementos de anotação (zero ou mais elementos permitidos)

Atributos Aplicáveis

A tabela abaixo descreve os atributos que podem ser aplicados ao elemento Using.

Nome do atributo é obrigatório Valor
Espaço de nomes Sim O nome do espaço de nomes importado.
Alias Sim Um identificador usado em vez do nome do espaço de nomes. Embora este atributo seja obrigatório, não é obrigatório que seja usado em vez do nome do namespace para qualificar nomes de objetos.

 

Observação

Qualquer número de atributos de anotação (atributos XML personalizados) pode ser aplicado ao elemento Using. No entanto, atributos personalizados podem não pertencer a nenhum namespace XML reservado para CSDL. Os nomes totalmente qualificados para quaisquer dois atributos personalizados não podem ser iguais.

 

Exemplo

O exemplo seguinte demonstra que o elemento Using está a ser usado para importar um namespace definido noutro local. Note que o namespace para o elemento Schema mostrado é BooksModel. A Address propriedade no PublisherEntityType é um tipo complexo que é definido no ExtendedBooksModel namespace (importado com o elemento Using ).

 <Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
           xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
           xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
           Namespace="BooksModel" Alias="Self">

     <Using Namespace="BooksModel.Extended" Alias="BMExt" />

 <EntityContainer Name="BooksContainer" >
       <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
     </EntityContainer>

 <EntityType Name="Publisher">
       <Key>
         <PropertyRef Name="Id" />
       </Key>
       <Property Type="Int32" Name="Id" Nullable="false" />
       <Property Type="String" Name="Name" Nullable="false" />
       <Property Type="BMExt.Address" Name="Address" Nullable="false" />
     </EntityType>

 </Schema>

 

 

Atributos de Anotação (CSDL)

Os atributos de anotação na linguagem de definição de esquema conceptual (CSDL) são atributos XML personalizados no modelo conceptual. Para além de ter uma estrutura XML válida, o seguinte deve ser verdade para os atributos de anotação:

  • Os atributos de anotação não devem estar em nenhum namespace XML reservado para CSDL.
  • Mais do que um atributo de anotação pode ser aplicado a um dado elemento CSDL.
  • Os nomes totalmente qualificados de quaisquer dois atributos de anotação não podem ser iguais.

Os atributos de anotação podem ser usados para fornecer metadados adicionais sobre os elementos num modelo conceptual. Os metadados contidos nos elementos de anotação podem ser acedidos em tempo de execução usando classes no espaço de nomes System.Data.Metadata.Edm.

Exemplo

O exemplo seguinte mostra um elemento EntityType com um atributo de anotação (CustomAttribute). O exemplo também mostra um elemento de anotação aplicado ao elemento do tipo de entidade.

 <Schema Namespace="SchoolModel" Alias="Self"
         xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
         xmlns="https://schemas.microsoft.com/ado/2009/11/edm">
   <EntityContainer Name="SchoolEntities" annotation:LazyLoadingEnabled="true">
     <EntitySet Name="People" EntityType="SchoolModel.Person" />
   </EntityContainer>
   <EntityType Name="Person" xmlns:p="http://CustomNamespace.com"
               p:CustomAttribute="Data here.">
     <Key>
       <PropertyRef Name="PersonID" />
     </Key>
     <Property Name="PersonID" Type="Int32" Nullable="false"
               annotation:StoreGeneratedPattern="Identity" />
     <Property Name="LastName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="FirstName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="HireDate" Type="DateTime" />
     <Property Name="EnrollmentDate" Type="DateTime" />
     <p:CustomElement>
       Custom metadata.
     </p:CustomElement>
   </EntityType>
 </Schema>

 

O código seguinte recupera os metadados no atributo de anotação e escreve-os na consola:

 EdmItemCollection collection = new EdmItemCollection("School.csdl");
 MetadataWorkspace workspace = new MetadataWorkspace();
 workspace.RegisterItemCollection(collection);
 EdmType contentType;
 workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
 if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomAttribute"))
 {
     MetadataProperty annotationProperty =
         contentType.MetadataProperties["http://CustomNamespace.com:CustomAttribute"];
     object annotationValue = annotationProperty.Value;
     Console.WriteLine(annotationValue.ToString());
 }

 

O código acima assume que o ficheiro School.csdl está no diretório de saída do projeto e que adicionou as seguintes instruções Imports e Using ao seu projeto:

 using System.Data.Metadata.Edm;

 

 

Elementos de Anotação (CSDL)

Os elementos de anotação na linguagem de definição de esquema conceptual (CSDL) são elementos XML personalizados no modelo conceptual. Para além de ter uma estrutura XML válida, o seguinte deve ser verdade para os elementos de anotação:

  • Os elementos de anotação não devem estar em nenhum namespace XML reservado para CSDL.
  • Mais do que um elemento de anotação pode ser filho de um dado elemento CSDL.
  • Os nomes totalmente qualificados de quaisquer dois elementos de anotação não podem ser os mesmos.
  • Os elementos de anotação devem aparecer depois de todos os outros elementos filhos de um dado elemento CSDL.

Os elementos de anotação podem ser usados para fornecer metadados adicionais sobre os elementos num modelo conceptual. A partir da versão 4 do .NET Framework, os metadados contidos nos elementos de anotação podem ser acedidos em tempo de execução usando classes no namespace System.Data.Metadata.Edm.

Exemplo

O exemplo seguinte mostra um elemento EntityType com um elemento de anotação (CustomElement). O exemplo também mostra um atributo de anotação aplicado ao elemento de tipo de entidade.

 <Schema Namespace="SchoolModel" Alias="Self"
         xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
         xmlns="https://schemas.microsoft.com/ado/2009/11/edm">
   <EntityContainer Name="SchoolEntities" annotation:LazyLoadingEnabled="true">
     <EntitySet Name="People" EntityType="SchoolModel.Person" />
   </EntityContainer>
   <EntityType Name="Person" xmlns:p="http://CustomNamespace.com"
               p:CustomAttribute="Data here.">
     <Key>
       <PropertyRef Name="PersonID" />
     </Key>
     <Property Name="PersonID" Type="Int32" Nullable="false"
               annotation:StoreGeneratedPattern="Identity" />
     <Property Name="LastName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="FirstName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="HireDate" Type="DateTime" />
     <Property Name="EnrollmentDate" Type="DateTime" />
     <p:CustomElement>
       Custom metadata.
     </p:CustomElement>
   </EntityType>
 </Schema>

 

O código seguinte recupera os metadados no elemento de anotação e escreve-os na consola:

 EdmItemCollection collection = new EdmItemCollection("School.csdl");
 MetadataWorkspace workspace = new MetadataWorkspace();
 workspace.RegisterItemCollection(collection);
 EdmType contentType;
 workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
 if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomElement"))
 {
     MetadataProperty annotationProperty =
         contentType.MetadataProperties["http://CustomNamespace.com:CustomElement"];
     object annotationValue = annotationProperty.Value;
     Console.WriteLine(annotationValue.ToString());
 }

 

O código acima assume que o ficheiro School.csdl está no diretório de saída do projeto e que adicionou as seguintes Imports instruções Using ao seu projeto:

 using System.Data.Metadata.Edm;

 

 

Tipos de Modelos Conceptuais (CSDL)

A linguagem de definição de esquemas conceptuais (CSDL) suporta um conjunto de tipos de dados primitivos abstratos, chamados EDMSimpleTypes, que definem propriedades num modelo conceptual. Os EDMSimpleTypes são proxies para tipos de dados primitivos suportados no ambiente de armazenamento ou alojamento.

A tabela abaixo lista os tipos de dados primitivos suportados pela CSDL. A tabela também lista as facetas que podem ser aplicadas a cada EDMSimpleType.

EDMSimpleType Descrição Facetas aplicáveis
Edm.Binary Contém dados binários. MaxLength, FixedLength, Nulo, Padrão
Edm.Boolean Contém o valor verdadeiro ou falso. Anulável, Predefinido
Edm.Byte Contém um valor inteiro de 8 bits não assinado. Precisão, anulável, padrão
Edm.DateTime Representa uma data e hora. Precisão, anulável, padrão
Edm.DateTimeOffset Contém uma data e hora como diferença em minutos a partir da Hora Média de Greenwich. Precisão, anulável, padrão
Edm.Decimal Contém um valor numérico com precisão e escala fixas. Precisão, anulável, padrão
Edm.Double Contém um número de ponto flutuante com precisão de 15 dígitos Precisão, anulável, padrão
Edm.Float Contém um número de vírgula flutuante com precisão de 7 dígitos. Precisão, anulável, padrão
Edm.Guid Contém um identificador exclusivo de 16 bytes. Precisão, anulável, padrão
Edm.Int16 Contém um valor inteiro de 16 bits assinado. Precisão, anulável, padrão
Edm.Int32 Contém um valor inteiro de 32 bits assinado. Precisão, anulável, padrão
Edm.Int64 Contém um valor inteiro de 64 bits assinado. Precisão, anulável, padrão
Edm.SByte Contém um valor inteiro de 8 bits assinado. Precisão, anulável, padrão
Edm.String Contém informações de caracteres. Unicode, FixedLength, MaxLength, Agrupamento, Precisão, Nulo, Padrão
Edm.Time Contém uma hora do dia. Precisão, anulável, padrão
Edm.Geography Nullable (pode ser nulo), Default (padrão), SRID
Edm.GeographyPoint Nulável, Padrão, SRID
Edm.GeographyLineString Nullable, Default, SRID
Edm.GeographyPolygon Nullable, Default, SRID
Edm.GeographyMultiPoint Nullable, Default, SRID
Edm.GeographyMultiLineString Anulável, Padrão, SRID
Edm.GeographyMultiPolygon Nullable, Default, SRID
Coleção Edm.Geography Nullable, Default, SRID
Edm.Geometria Nullable, Padrão, SRID
Edm.GeometryPoint Nullable, Default, SRID
Edm.GeometryLineString Nullable, Default, SRID
Edm.GeometryPolygon Nullable, Default, SRID
Edm.GeometryMultiPoint Nullable, Default, SRID
Edm.GeometryMultiLineString Nullable, Padrão, SRID
Edm.GeometryMultiPolygon Nullable, Default, SRID
Edm.GeometryCollection Nullable (Aceitável nulo), Default (Padrão), SRID

Facetas (CSDL)

As facetas na linguagem de definição de esquemas conceptuais (CSDL) representam restrições sobre propriedades dos tipos de entidades e tipos complexos. As facetas aparecem como atributos XML nos seguintes elementos CSDL:

  • Propriedade
  • TypeRef
  • Parâmetro

A tabela seguinte descreve as facetas suportadas na CSDL. Todos os aspetos são opcionais. Algumas facetas listadas abaixo são utilizadas pelo Entity Framework ao gerar uma base de dados a partir de um modelo conceptual.

Observação

Para informações sobre tipos de dados num modelo conceptual, veja Tipos de Modelo Conceptual (CSDL).

Faceta Descrição Aplica-se a Utilizado para a geração de bases de dados Usado pelo runtime
Collation Especifica a sequência de agrupamento (ou sequência de classificação) a ser usada ao executar operações de comparação e ordenação em valores da propriedade. Edm.String Sim No
ConcurrencyMode Indica que o valor da propriedade deve ser usado para verificações de simultaneidade otimistas. Todas as propriedades do EDMSimpleType No Sim
Predefinição Especifica o valor padrão da propriedade se nenhum valor for fornecido durante a instanciação. Todas as propriedades do EDMSimpleType Sim Sim
Comprimento Fixo Especifica se o comprimento do valor da propriedade pode variar. Edm.Binary, Edm.String Sim No
MaxLength Especifica o comprimento máximo do valor da propriedade. Edm.Binary, Edm.String Sim No
Anulável Especifica se a propriedade pode ter um valor nulo . Todas as propriedades do EDMSimpleType Sim Sim
Precisão Para propriedades do tipo Decimal, especifica o número de dígitos que um valor de propriedade pode ter. Para propriedades do tipo Time, DateTime e DateTimeOffset, especifica o número de dígitos para a parte fracionária de segundos do valor da propriedade. Edm.DateTime, Edm.DateTimeOffset, Edm.Decimal, Edm.Time Sim No
Scale Especifica o número de dígitos à direita da vírgula decimal para o valor da propriedade. Edm.Decimal Sim No
SRID Especifica o ID do Sistema de Referência do Sistema Espacial. Para mais informações, veja SRID e SRID (SQL Server). Edm.Geography, Edm.GeographyPoint, Edm.GeographyLineString, Edm.GeographyPolygon, Edm.GeographyMultiPoint, Edm.GeographyMultiLineString, Edm.GeographyMultiPolygon, Edm.GeographyCollection, Edm.Geometry, Edm.GeometryPoint, Edm.GeometryLineString, Edm.GeometryPolygon, Edm.GeometryMultiPoint, Edm.GeometryMultiLineString, Edm.GeometryMultiPolygon, Edm.GeometryCollection No Sim
Unicode Indica se o valor da propriedade é armazenado como Unicode. Edm.String Sim Sim

Observação

Ao gerar uma base de dados a partir de um modelo conceptual, o Assistente de Geração de Base de Dados reconhecerá o valor do atributo StoreGeneratedPattern num elemento Property se este estiver no seguinte espaço de nomes: https://schemas.microsoft.com/ado/2009/02/edm/annotation. Os valores suportados para o atributo são Identity e Computed. Um valor de Identidade produzirá uma coluna de base de dados com um valor de identidade que é gerado na base de dados. Um valor de Computed produzirá uma coluna com um valor que é calculado na base de dados.

Exemplo

O exemplo seguinte mostra facetas aplicadas às propriedades de um tipo de entidade:

 <EntityType Name="Product">
   <Key>
     <PropertyRef Name="ProductId" />
   </Key>
   <Property Type="Int32"
             Name="ProductId" Nullable="false"
             a:StoreGeneratedPattern="Identity"
    xmlns:a="https://schemas.microsoft.com/ado/2009/02/edm/annotation" />
   <Property Type="String"
             Name="ProductName"
             Nullable="false"
             MaxLength="50" />
   <Property Type="String"
             Name="Location"
             Nullable="true"
             MaxLength="25" />
 </EntityType>