Especificação de SSDL

A SSDL (linguagem de definição de esquema) de armazenamento é uma linguagem baseada em XML que descreve o modelo de armazenamento de um aplicativo do Entity Framework.

Em um aplicativo do Entity Framework, os metadados do modelo de armazenamento são carregados de um arquivo .ssdl (escrito em SSDL) em uma instância da classe System.Data.Metadata.Edm.StoreItemCollection e podem ser acessados usando métodos na classe System.Data.Metadata.Edm.MetadataWorkspace. O Entity Framework usa metadados de modelo de armazenamento para traduzir consultas no modelo conceitual para comandos específicos do repositório.

O Designer da Entity Framework (Designer EF) armazena informações do modelo de armazenamento em um arquivo .edmx no momento do design. No momento do build, o Designer de Entidade usa informações em um arquivo .edmx para criar o arquivo .ssdl necessário para o Entity Framework em runtime.

As versões do SSDL são diferenciadas por namespaces XML.

Versão do SSDL XML Namespace
SSDL v1 https://schemas.microsoft.com/ado/2006/04/edm/ssdl
SSDL v2 https://schemas.microsoft.com/ado/2009/02/edm/ssdl
SSDL v3 https://schemas.microsoft.com/ado/2009/11/edm/ssdl

Elemento Association (SSDL)

Um elemento Association na linguagem de definição de esquema de repositório (SSDL) especifica colunas de tabela que participam de uma restrição de chave estrangeira no banco de dados subjacente. Dois elementos finais filho necessários especificam tabelas no final da associação e a multiplicidade em cada extremidade. Um elemento Opcionais ReferentialConstraint especifica as extremidades principal e dependente da associação, bem como as colunas participantes. Se nenhum elemento ReferentialConstraint estiver presente, um elemento AssociationSetMapping deverá ser usado para especificar os mapeamentos de coluna para a associação.

O elemento Association pode ter os seguintes elementos filho (na ordem listada):

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

Atributos aplicáveis

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento Association.

Nome do atributo É Obrigatório Valor
Nome Sim O nome da restrição de chave estrangeira correspondente no banco de dados subjacente.

Observação

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

Exemplo

O exemplo a seguir mostra um elemento Association que usa um elemento ReferentialConstraint para especificar as colunas que participam do FK_CustomerOrders restrição de chave estrangeira:

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Elemento AssociationSet (SSDL)

O elemento AssociationSet na linguagem de definição de esquema do repositório (SSDL) representa uma restrição de chave estrangeira entre duas tabelas no banco de dados subjacente. As colunas de tabela que participam da restrição de chave estrangeira são especificadas em um elemento Association. O elemento Association que corresponde a um determinado elemento AssociationSet é especificado no atributo Association do elemento AssociationSet.

Os conjuntos de associações SSDL são mapeados para conjuntos de associações CSDL por um elemento AssociationSetMapping. No entanto, se a associação CSDL de um determinado conjunto de associações CSDL for definida usando um elemento ReferentialConstraint, nenhum elemento associationSetMapping correspondente será necessário. Nesse caso, se um elemento AssociationSetMapping estiver presente, os mapeamentos definidos serão substituídos pelo elemento ReferentialConstraint.

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

  • Documentação (zero ou um)
  • Fim (zero ou dois)
  • Elementos de anotação (zero ou mais)

Atributos aplicáveis

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

Nome do atributo É Obrigatório Valor
Nome Sim O nome da restrição de chave estrangeira que o conjunto de associações representa.
Associação Sim O nome da associação que define as colunas que participam da restrição de chave estrangeira.

Observação

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

Exemplo

O exemplo a seguir mostra um elemento AssociationSet que representa a restrição de chave estrangeira FK_CustomerOrders no banco de dados subjacente:

 <AssociationSet Name="FK_CustomerOrders"
                 Association="ExampleModel.Store.FK_CustomerOrders">
   <End Role="Customers" EntitySet="Customers" />
   <End Role="Orders" EntitySet="Orders" />
 </AssociationSet>

Elemento CollectionType (SSDL)

O elemento CollectionType na linguagem de definição de esquema de repositório (SSDL) especifica que o tipo de retorno de uma função é uma coleção. O elemento CollectionType é um filho do elemento ReturnType. O tipo de coleção é especificado usando o elemento filho RowType:

Observação

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

Exemplo

O exemplo a seguir mostra uma função que usa um elemento CollectionType para especificar que a função retorna uma coleção de linhas.

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

Elemento CommandText (SSDL)

O elemento CommandText na linguagem de definição de esquema do repositório (SSDL) é um filho do elemento Function que permite definir uma instrução SQL executada no banco de dados. O elemento CommandText permite adicionar funcionalidade semelhante a um procedimento armazenado no banco de dados, mas você define o elemento CommandText no modelo de armazenamento.

O elemento CommandText não pode ter elementos filho. O corpo do elemento CommandText deve ser uma instrução SQL válida para o banco de dados subjacente.

Nenhum atributo é aplicável ao elemento CommandText.

Exemplo

O exemplo a seguir mostra um elemento de Function com um elemento CommandText filho. Exponha a função UpdateProductInOrder como um método no ObjectContext importando-a para o modelo conceitual.  

 <Function Name="UpdateProductInOrder" IsComposable="false">
   <CommandText>
     UPDATE Orders
     SET ProductId = @productId
     WHERE OrderId = @orderId;
   </CommandText>
   <Parameter Name="productId"
              Mode="In"
              Type="int"/>
   <Parameter Name="orderId"
              Mode="In"
              Type="int"/>
 </Function>

Elemento DefiningQuery (SSDL)

O elemento DefiningQuery na linguagem de definição de esquema do repositório (SSDL) permite executar uma instrução SQL diretamente no banco de dados subjacente. O elemento DefiningQuery é comumente usado como uma exibição de banco de dados, mas a exibição é definida no modelo de armazenamento em vez do banco de dados. A exibição definida em um elemento DefiningQuery pode ser mapeada para um tipo de entidade no modelo conceitual por meio de um elemento EntitySetMapping. Esses mapeamentos são somente leitura.  

A sintaxe SSDL a seguir mostra a declaração de um EntitySet seguido pelo elemento DefiningQuery que contém uma consulta usada para recuperar a exibição.

 <Schema>
     <EntitySet Name="Tables" EntityType="Self.STable">
         <DefiningQuery>
           SELECT  TABLE_CATALOG,
                   'test' as TABLE_SCHEMA,
                   TABLE_NAME
           FROM    INFORMATION_SCHEMA.TABLES
         </DefiningQuery>
     </EntitySet>
 </Schema>

Você pode usar procedimentos armazenados no Entity Framework para habilitar cenários de leitura/gravação em modos de exibição. Você pode usar uma exibição de fonte de dados ou uma exibição Entity SQL como a tabela base para recuperar dados e para o processamento de alterações por procedimentos armazenados.

Você pode usar o elemento DefiningQuery para direcionar o Microsoft SQL Server Compact 3.5. Embora o SQL Server Compact 3.5 não dê suporte a procedimentos armazenados, você pode implementar uma funcionalidade semelhante com o elemento DefiningQuery. Outro local em que pode ser útil é criar procedimentos armazenados para superar uma incompatibilidade entre os tipos de dados usados na linguagem de programação e os da fonte de dados. Você pode escrever um DefiningQuery que usa um determinado conjunto de parâmetros e, em seguida, chama um procedimento armazenado com um conjunto diferente de parâmetros, por exemplo, um procedimento armazenado que exclui dados.

Elemento Dependent (SSDL)

O elemento Dependent na linguagem de definição de esquema do repositório (SSDL) é um elemento filho para o elemento ReferentialConstraint que define o final dependente de uma restrição de chave estrangeira (também chamada de restrição referencial). O elemento Dependent especifica a coluna (ou colunas) em uma tabela que faz referência a uma coluna de chave primária (ou colunas). Os elementos PropertyRef especificam quais colunas são referenciadas. O elemento Principal especifica as colunas de chave primária referenciadas por colunas especificadas no elemento Dependent.

O elemento Dependent pode ter os seguintes elementos filho (na ordem listada):

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

Atributos aplicáveis

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento Dependent.

Nome do atributo É Obrigatório Valor
Função Sim O mesmo valor do atributo Role (se usado) do elemento End correspondente; caso contrário, o nome da tabela que contém a coluna de referência.

Observação

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

Exemplo

O exemplo a seguir mostra um elemento Association que usa um elemento ReferentialConstraint para especificar as colunas que participam do FK_CustomerOrders restrição de chave estrangeira. O elemento Dependent especifica a coluna CustomerId da tabela Order como o final dependente da restrição.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Elemento Documentation (SSDL)

O elemento Documentation na linguagem de definição de esquema do repositório (SSDL) pode ser usado para fornecer informações sobre um objeto definido em um elemento pai.

O elemento Documentation pode ter os seguintes elementos filho (na ordem listada):

  • Resumo: uma breve descrição do elemento pai. (zero ou um elemento)
  • LongDescription: uma descrição abrangente do elemento pai. (zero ou um elemento)

Atributos aplicáveis

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

Exemplo

O exemplo a seguir mostra o elemento Documentation como um elemento filho de um elemento EntityType.

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

Elemento End (SSDL)

O elemento End na linguagem de definição de esquema do repositório (SSDL) especifica a tabela e o número de linhas em uma extremidade de uma restrição de chave estrangeira no banco de dados subjacente. O elemento End pode ser um filho do elemento Association ou do elemento AssociationSet. Em cada caso, os possíveis elementos filho e atributos aplicáveis são diferentes.

Elemento End como um filho do elemento Association

Um elemento End (como filho do elemento Association) especifica a tabela e o número de linhas no final de uma restrição de chave estrangeira com os atributos Type e Multiplicity, respectivamente. As extremidades de uma restrição de chave estrangeira são definidas como parte de uma associação SSDL; uma associação SSDL deve ter exatamente duas extremidades.

Um elemento End pode ter os seguintes elementos filho (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 a seguir descreve os atributos que podem ser aplicados ao elemento End quando ele é filho de um elemento Association.

Nome do atributo É Obrigatório Valor
Tipo Sim O nome totalmente qualificado do conjunto de entidades SSDL que está no final da restrição de chave estrangeira.
Função Não O valor do atributo Role no elemento Principal ou Dependent do elemento ReferentialConstraint correspondente (se usado).
Multiplicidade Sim 1, 0..1 ou * dependendo do número de linhas que podem estar no final da restrição de chave estrangeira.
1 indica que existe exatamente uma linha no final da restrição de chave estrangeira.
0..1 indica que existe uma linha ou zero no final da restrição de chave estrangeira.
* indica que zero, uma ou mais linhas existem no final da restrição de chave estrangeira.

Observação

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

Exemplo

O exemplo a seguir mostra um elemento Association que define o FK_CustomerOrders restrição de chave estrangeira. Os valores Multiplicity especificados em cada elemento End indicam que muitas linhas na tabela Orders podem ser associadas a uma linha na tabela Customers, mas apenas uma linha na tabela Customers pode ser associada a uma linha na tabela Orders. Além disso, o elemento OnDelete indica que todas as linhas na tabela Orders que fazem referência a uma linha específica na tabela Customers serão excluídas se a linha na tabela Customers for excluída.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Elemento End como um filho do elemento AssociationSet

O elemento End (como um filho do elemento AssociationSet) especifica uma tabela em uma extremidade de uma restrição de chave estrangeira no banco de dados subjacente.

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

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

Atributos aplicáveis

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento End quando ele é filho de um elemento filhoAssociationSet.

Nome do atributo É Obrigatório Valor
EntitySet Sim O nome do conjunto de entidades SSDL que está no final da restrição de chave estrangeira.
Função Não O valor de um dos atributos Role especificados em um elemento End do elemento Association correspondente.

Observação

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

Exemplo

O exemplo a seguir mostra um elemento EntityContainer com um elemento AssociationSet com dois elementos End:

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

Elemento EntityContainer (SSDL)

Um elemento EntityContainer na linguagem de definição de esquema do repositório (SSDL) descreve a estrutura da fonte de dados subjacente em um aplicativo Entity Framework: conjuntos de entidades SSDL (definidos em elementos EntitySet) representam tabelas em um banco de dados, tipos de entidade SSDL (definidos em elementos EntityType) representam linhas em uma tabela e conjuntos de associação (definidos em elementos AssociationSet) representam restrições de chave estrangeira em um banco de dados. Um contêiner de entidade de modelo de armazenamento é mapeado para um contêiner de entidade de modelo conceitual por meio do elemento EntityContainerMapping.

Um elemento EntityContainer pode ter zero ou um elemento de Documentation. Se um elemento Documentation estiver presente, ele deverá todos os outros elementos filho.

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

  • EntitySet
  • AssociationSet
  • Elementos de anotação

Atributos aplicáveis

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento EntityContainer.

Nome do atributo É Obrigatório Valor
Nome Sim O nome do contêiner de entidade. Esse nome não pode conter períodos (.).

Observação

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

Exemplo

O exemplo a seguir mostra um elemento EntityContainer que define dois conjuntos de entidades e um conjunto de associações. Observe que os nomes de tipo de entidade e de tipo de associação são qualificados pelo nome do namespace do modelo conceitual.

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

Elemento EntitySet (SSDL)

Um elemento EntitySet na linguagem de definição de esquema do repositório (SSDL) representa uma tabela ou exibição no banco de dados subjacente. Um elemento EntityType no SSDL representa uma linha na tabela ou exibição. O atributo EntityType de um elemento EntitySet especifica o tipo de entidade SSDL específico que representa linhas em um conjunto de entidades SSDL. O mapeamento entre um conjunto de entidades CSDL e um conjunto de entidades SSDL é especificado em um elemento EntitySetMapping.

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

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

Atributos aplicáveis

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

Observação

Alguns atributos (não listados aqui) podem ser qualificados com o alias do repositório. Esses atributos são usados pelo Assistente de Modelo de Atualização ao atualizar um modelo.

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.
Esquema Não O esquema de banco de dados.
Table Não A tabela do banco de dados.

Observação

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

Exemplo

O exemplo a seguir mostra um elemento EntityContainer que tem dois elementos EntitySet e um elemento AssociationSet:

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

Elemento EntityType (SSDL)

Um elemento EntityType na linguagem de definição de esquema do repositório (SSDL) representa uma linha em uma tabela ou exibição do banco de dados subjacente. Um elemento EntitySet no SSDL representa a tabela ou exibição em que as linhas ocorrem. O atributo EntityType de um elemento EntitySet especifica o tipo de entidade SSDL específico que representa linhas em um conjunto de entidades SSDL. O mapeamento entre um tipo de entidade SSDL e um tipo de entidade CSDL é especificado em um elemento EntityTypeMapping.

O elemento EntityType pode ter os seguintes elementos filho (na ordem listada):

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

Atributos aplicáveis

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

Nome do atributo É Obrigatório Valor
Nome Sim O nome do tipo de entidade. Esse valor geralmente é o mesmo que o nome da tabela na qual o tipo de entidade representa uma linha. Esse valor não pode conter períodos (.).

Observação

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

Exemplo

O exemplo a seguir mostra um elemento EntityType com duas propriedades:

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

Elemento Function (SSDL)

O elemento Function no SSDL (linguagem de definição de esquema) do repositório especifica um procedimento armazenado que existe no banco de dados subjacente.

O elemento Function pode ter os seguintes elementos filho (na ordem listada):

  • Documentação (zero ou um)
  • Parâmetro (zero ou mais)
  • CommandText (zero ou um)
  • ReturnType (zero ou mais)
  • Elementos de anotação (zero ou mais)

Um tipo de retorno para uma função deve ser especificado com o elemento ReturnType ou o atributo ReturnType (veja abaixo), mas não ambos.

Os procedimentos armazenados especificados no modelo de armazenamento podem ser importados para o modelo conceitual de um aplicativo. Para obter mais informações, consulte Consulta com procedimentos armazenados. O elemento Function também pode ser usado para definir funções personalizadas no modelo de armazenamento.  

Atributos aplicáveis

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento Function.

Observação

Alguns atributos (não listados aqui) podem ser qualificados com o alias do repositório. Esses atributos são usados pelo Assistente de Modelo de Atualização ao atualizar um modelo.

Nome do atributo É Obrigatório Valor
Nome Sim O nome do procedimento armazenado.
ReturnType Não O tipo de retorno do procedimento armazenado.
Agregação Não True se o procedimento armazenado retornar um valor agregado; caso contrário, False.
BuiltIn Não True se a função for uma função interna 1; caso contrário, False.
StoreFunctionName Não O nome do procedimento armazenado.
NiladicFunction Não True se a função for uma função niladic2; False caso contrário.
IsComposable Não True se a função for uma função composable 3; False caso contrário.
ParameterTypeSemantics Não A enumeração que define a semântica de tipo usada para resolver sobrecargas de função. A enumeração é definida no manifesto do provedor por definição de função. O valor padrão é AllowImplicitConversion.
Esquema Não O nome do esquema no qual o procedimento armazenado é definido.

1 Uma função interna é uma função definida no banco de dados. Para obter informações sobre as funções definidas no modelo de armazenamento, consulte o Elemento CommandText (SSDL).

2 Uma função niladic é uma função que não aceita parâmetros e, quando chamada, não requer parênteses.

3 Duas funções serão redigiráveis se a saída de uma função puder ser a entrada para a outra função.

Observação

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

Exemplo

O exemplo a seguir mostra um elemento Function que corresponde ao procedimento armazenado UpdateOrderQuantity. O procedimento armazenado aceita dois parâmetros e não retorna um valor.

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

Elemento Key (SSDL)

O elemento Key na linguagem de definição de esquema do repositório (SSDL) representa a chave primária de uma tabela no banco de dados subjacente. Key é um elemento filho de um elemento EntityType, que representa uma linha em uma tabela. A chave primária é definida no elemento Key fazendo referência a um ou mais elementos property definidos no elemento EntityType.

O elemento Key pode ter os seguintes elementos filho (na ordem listada):

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

Nenhum atributo é aplicável ao elemento Key.

Exemplo

O exemplo a seguir mostra um elemento EntityType com uma chave que faz referência a uma propriedade:

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

Elemento OnDelete (SSDL)

O elemento OnDelete na linguagem de definição de esquema do repositório (SSDL) reflete o comportamento do banco de dados quando uma linha que participa de uma restrição de chave estrangeira é excluída. Se a ação for definida como Cascade, as linhas que fazem referência a uma linha que está sendo excluída também serão excluídas. Se a ação for definida como None, as linhas que fazem referência a uma linha que está sendo excluída também não serão excluídas. Um elemento OnDelete é um elemento filho de um elemento End.

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

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

Atributos aplicáveis

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

Nome do atributo É Obrigatório Valor
Ação Sim Cascade ou None. (O valor Restricted é válido, mas tem o mesmo comportamento que None.)

Observação

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

Exemplo

O exemplo a seguir mostra um elemento Association que define o FK_CustomerOrders restrição de chave estrangeira. O elemento OnDelete indica que todas as linhas na tabela Orders que fazem referência a uma linha específica na tabela Customers serão excluídas se a linha na tabela Customers for excluída.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Elemento Parameter (SSDL)

O elemento Parameter na linguagem de definição de esquema de armazenamento (SSDL) é um filho do elemento Function que especifica parâmetros para um procedimento armazenado no banco de dados.

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

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

Atributos aplicáveis

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento Parameter.

Nome do atributo É Obrigatório Valor
Nome Sim O nome do parâmetro.
Tipo Sim O tipo de parâmetro.
Modo Não In, Out ou InOut, dependendo se o parâmetro é um parâmetro de entrada, saída ou entrada/saída.
MaxLength Não O comprimento máximo do parâmetro.
Precisão Não A precisão do parâmetro.
Escala Não A escala do parâmetro.
SRID Não Identificador de referência do sistema espacial. Válido somente para parâmetros de tipos espaciais. Para obter mais informações, consulte SRID e SRID (SQL Server).

Observação

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

Exemplo

O exemplo a seguir mostra um elemento Function que tem dois elementos Parameter que especificam parâmetros de entrada:

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

Elemento Principal (SSDL)

O elemento Principal na linguagem de definição de esquema do repositório (SSDL) é um elemento filho para o elemento ReferentialConstraint que define a extremidade principal de uma restrição de chave estrangeira (também chamada de restrição referencial). O elemento Principal especifica a coluna de chave primária (ou colunas) em uma tabela referenciada por outra coluna (ou colunas). Os elementos PropertyRef especificam quais colunas são referenciadas. O elemento Dependent especifica colunas que fazem referência às colunas de chave primária especificadas no elemento Principal.

O elemento Principal pode ter os seguintes elementos filho (na ordem listada):

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

Atributos aplicáveis

A tabela a seguir descreve os atributos que podem ser aplicados ao elemento Principal.

Nome do atributo É Obrigatório Valor
Função Sim O mesmo valor do atributo Role (se usado) do elemento End correspondente; caso contrário, o nome da tabela que contém a coluna referenciada.

Observação

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

Exemplo

O exemplo a seguir mostra um elemento Association que usa um elemento ReferentialConstraint para especificar as colunas que participam do FK_CustomerOrders restrição de chave estrangeira. O elemento Principal especifica a coluna CustomerId da tabela Customer como o final principal da restrição.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Elemento Property (SSDL)

O elemento Property na linguagem de definição de esquema do repositório (SSDL) representa uma coluna em uma tabela no banco de dados subjacente. Os elementos de Property são filhos de elementos EntityType, que representam linhas em uma tabela. Cada elemento Property definido em um elemento EntityType representa uma coluna.

Um elemento Property não pode ter elementos filho.

Atributos aplicáveis

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

Nome do atributo É Obrigatório Valor
Nome Sim O nome da coluna correspondente.
Tipo Sim O tipo da coluna correspondente.
Permite valor nulo Não True (o valor padrão) ou False, dependendo se a coluna correspondente pode ter um valor nulo.
DefaultValue Não O valor padrão da coluna correspondente.
MaxLength Não O comprimento máximo da coluna correspondente.
FixedLength Não True ou False, dependendo se o valor da coluna correspondente será armazenado como uma cadeia de caracteres de comprimento fixo.
Precisão Não A precisão da coluna correspondente.
Escala Não A escala da coluna correspondente.
Unicode Não True ou False, dependendo se o valor da coluna correspondente será armazenado como uma cadeia de caracteres Unicode.
Ordenação Não Uma cadeia de caracteres que especifica a sequência de agrupamento a ser usada na fonte de dados.
SRID Não Identificador de referência do sistema espacial. Válido apenas para propriedades de tipos espaciais. Para obter mais informações, consulte SRID e SRID (SQL Server).
StoreGeneratedPattern Não Nenhum, Identidade (se o valor da coluna correspondente for uma identidade gerada no banco de dados) ou Computed (se o valor da coluna correspondente for computado no banco de dados). Não é válido para propriedades RowType.

Observação

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

Exemplo

O exemplo a seguir mostra um elemento EntityType com dois elementos Property filhos:

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

Elemento PropertyRef (SSDL)

O elemento PropertyRef na linguagem de definição de esquema de repositório (SSDL) faz referência a uma propriedade definida em um elemento EntityType para indicar que a propriedade executará uma das seguintes funções:

  • Faça parte da chave primária da tabela que o EntityType representa. Um ou mais elementos PropertyRef podem ser usados para definir uma chave primária. Para obter mais informações, consulte o elemento Key.
  • Seja o fim dependente ou principal de uma restrição referencial. Para obter mais informações, consulte o elemento ReferentialConstraint.

O elemento PropertyRef só pode ter os seguintes elementos filho:

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

Atributos aplicáveis

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

Nome do atributo É Obrigatório Valor
Nome Sim O nome da propriedade referenciada.

Observação

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

Exemplo

O exemplo a seguir mostra um elemento PropertyRef usado para definir uma chave primária fazendo referência a uma propriedade definida em um elemento EntityType.

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

Elemento ReferentialConstraint (SSDL)

O elemento ReferentialConstraint na linguagem de definição de esquema do repositório (SSDL) representa uma restrição de chave estrangeira (também chamada de restrição de integridade referencial) no banco de dados subjacente. As extremidades principal e dependente da restrição são especificadas pelos elementos principal e filho dependentes, respectivamente. As colunas que participam da entidade de segurança e das extremidades dependentes são referenciadas com elementos PropertyRef.

O elemento ReferentialConstraint é um elemento filho opcional do elemento Association. Se um elemento ReferentialConstraint não for usado para mapear a restrição de chave estrangeira especificada no elemento Association, um elemento AssociationSetMapping deverá ser usado para fazer isso.

O elemento ReferentialConstraint pode ter os seguintes elementos filho:

  • Documentação (zero ou um)
  • Entidade de segurança (exatamente uma)
  • Dependente (exatamente um)
  • 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 ReferentialConstraint. No entanto, os atributos personalizados podem não pertencer a nenhum namespace XML reservado para SSDL. Os nomes totalmente qualificados para dois atributos personalizados não podem ser os mesmos.

Exemplo

O exemplo a seguir mostra um elemento Association que usa um elemento ReferentialConstraint para especificar as colunas que participam do FK_CustomerOrders restrição de chave estrangeira:

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Elemento ReturnType (SSDL)

O elemento ReturnType na linguagem de definição de esquema do repositório (SSDL) especifica o tipo de retorno para uma função definida em um elemento Function. Um tipo de retorno de função também pode ser especificado com um atributo ReturnType.

O tipo de retorno de uma função é especificado com o atributo Type ou o elemento ReturnType.

O elemento ReturnType pode ter os seguintes elementos filho:

  • CollectionType (um)

Observação

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

Exemplo

O exemplo a seguir usa uma Function que retorna uma coleção de linhas.

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

Elemento RowType (SSDL)

Um elemento RowType na linguagem de definição de esquema do repositório (SSDL) define uma estrutura sem nome como um tipo de retorno para uma função definida no repositório.

Um elemento RowType é o elemento filho do elemento CollectionType:

Um elemento RowType pode ter os seguintes elementos filho:

  • Propriedade (uma ou mais)

Exemplo

O exemplo a seguir mostra uma função de repositório que usa um elemento CollectionType para especificar que a função retorna uma coleção de linhas (conforme especificado no elemento RowType).

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

Elemento Schema (SSDL)

O elemento Schema na linguagem de definição de esquema do repositório (SSDL) é o elemento raiz de uma definição de modelo de armazenamento. Ele contém definições para objetos, funções e contêineres que compõem um modelo de armazenamento.

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

  • Associação
  • EntityType
  • EntityContainer
  • Função

O elemento Schema usa o atributo Namespace para definir o namespace para o tipo de entidade e objetos de associação em um modelo de armazenamento. Em um namespace, nenhum objeto pode ter o mesmo nome.

Um namespace de modelo de armazenamento é diferente do namespace XML do elemento Schema. Um namespace de modelo de armazenamento (conforme definido pelo atributo Namespace) é um contêiner lógico para tipos de entidade e tipos de associação. O namespace XML (indicado pelo atributo xmlns) de um elemento filhoSchema é o namespace padrão para elementos filho e atributos do elemento Schema. Namespaces XML do formulário https://schemas.microsoft.com/ado/YYYY/MM/edm/ssdl (em que YYYY e MM representam um ano e um mês, respectivamente) são reservados para SSDL. Elementos e atributos personalizados não podem estar em namespaces que tenham esse formulário.

Atributos aplicáveis

A tabela a seguir descreve que os atributos podem ser aplicados ao elemento Schema.

Nome do atributo É Obrigatório Valor
Namespace Sim O namespace do modelo de armazenamento. 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 ExampleModel.Store, o nome totalmente qualificado do EntityType será ExampleModel.Store.Customer.
As cadeias de caracteres a seguir não podem ser usadas como o valor do 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 CSDL Schema.
Alias Não Um identificador usado no lugar do nome do namespace. Por exemplo, se um EntityType chamado Customer estiver no namespace ExampleModel.Store e o valor do atributo Alias estiver StorageModel, você poderá usar StorageModel.Customer como o nome totalmente qualificado do EntityType.
Provedor Sim O provedor de dados.
ProviderManifestToken Sim Um token que indica ao provedor qual manifesto do provedor retornar. Nenhum formato para o token é definido. Os valores do token são definidos pelo provedor. Para obter informações sobre tokens de manifesto do provedor do SQL Server, consulte SqlClient for Entity Framework.

Exemplo

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

 <Schema Namespace="ExampleModel.Store"
       Alias="Self" Provider="System.Data.SqlClient"
       ProviderManifestToken="2008"
       xmlns="https://schemas.microsoft.com/ado/2009/11/edm/ssdl">
   <EntityContainer Name="ExampleModelStoreContainer">
     <EntitySet Name="Customers"
                EntityType="ExampleModel.Store.Customers"
                Schema="dbo" />
     <EntitySet Name="Orders"
                EntityType="ExampleModel.Store.Orders"
                Schema="dbo" />
     <AssociationSet Name="FK_CustomerOrders"
                     Association="ExampleModel.Store.FK_CustomerOrders">
       <End Role="Customers" EntitySet="Customers" />
       <End Role="Orders" EntitySet="Orders" />
     </AssociationSet>
   </EntityContainer>
   <EntityType Name="Customers">
     <Documentation>
       <Summary>Summary here.</Summary>
       <LongDescription>Long description here.</LongDescription>
     </Documentation>
     <Key>
       <PropertyRef Name="CustomerId" />
     </Key>
     <Property Name="CustomerId" Type="int" Nullable="false" />
     <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
   </EntityType>
   <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
     <Key>
       <PropertyRef Name="OrderId" />
     </Key>
     <Property Name="OrderId" Type="int" Nullable="false"
               c:CustomAttribute="someValue"/>
     <Property Name="ProductId" Type="int" Nullable="false" />
     <Property Name="Quantity" Type="int" Nullable="false" />
     <Property Name="CustomerId" Type="int" Nullable="false" />
     <c:CustomElement>
       Custom data here.
     </c:CustomElement>
   </EntityType>
   <Association Name="FK_CustomerOrders">
     <End Role="Customers"
          Type="ExampleModel.Store.Customers" Multiplicity="1">
       <OnDelete Action="Cascade" />
     </End>
     <End Role="Orders"
          Type="ExampleModel.Store.Orders" Multiplicity="*" />
     <ReferentialConstraint>
       <Principal Role="Customers">
         <PropertyRef Name="CustomerId" />
       </Principal>
       <Dependent Role="Orders">
         <PropertyRef Name="CustomerId" />
       </Dependent>
     </ReferentialConstraint>
   </Association>
   <Function Name="UpdateOrderQuantity"
             Aggregate="false"
             BuiltIn="false"
             NiladicFunction="false"
             IsComposable="false"
             ParameterTypeSemantics="AllowImplicitConversion"
             Schema="dbo">
     <Parameter Name="orderId" Type="int" Mode="In" />
     <Parameter Name="newQuantity" Type="int" Mode="In" />
   </Function>
   <Function Name="UpdateProductInOrder" IsComposable="false">
     <CommandText>
       UPDATE Orders
       SET ProductId = @productId
       WHERE OrderId = @orderId;
     </CommandText>
     <Parameter Name="productId"
                Mode="In"
                Type="int"/>
     <Parameter Name="orderId"
                Mode="In"
                Type="int"/>
   </Function>
 </Schema>

Atributos de anotação

Os atributos de anotação na linguagem de definição de esquema de repositório (SSDL) são atributos XML personalizados no modelo de armazenamento que fornecem metadados extras sobre os elementos no modelo de armazenamento. Além de ter uma estrutura XML válida, as seguintes restrições se aplicam a atributos de anotação:

  • Os atributos de anotação não devem estar em nenhum namespace XML reservado para SSDL.
  • Os nomes totalmente qualificados de dois atributos de anotação não devem ser os mesmos.

Mais de um atributo de anotação pode ser aplicado a um determinado elemento SSDL. Metadados contidos em elementos de anotação podem ser acessados em runtime usando classes no namespace System.Data.Metadata.Edm.

Exemplo

O exemplo a seguir mostra um elemento EntityType que tem um atributo de anotação aplicado à propriedade OrderId. O exemplo também mostra um elemento de anotação adicionado ao elemento EntityType.

 <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
   <Key>
     <PropertyRef Name="OrderId" />
   </Key>
   <Property Name="OrderId" Type="int" Nullable="false"
             c:CustomAttribute="someValue"/>
   <Property Name="ProductId" Type="int" Nullable="false" />
   <Property Name="Quantity" Type="int" Nullable="false" />
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <c:CustomElement>
     Custom data here.
   </c:CustomElement>
 </EntityType>

Elementos de anotação (SSDL)

Os elementos de anotação na SSDL (linguagem de definição de esquema) do repositório são elementos XML personalizados no modelo de armazenamento que fornecem metadados extras sobre o modelo de armazenamento. Além de ter uma estrutura XML válida, as seguintes restrições se aplicam a elementos de anotação:

  • Os elementos de anotação não devem estar em nenhum namespace XML reservado para SSDL.
  • Os nomes totalmente qualificados de qualquer dois elementos de anotação não devem ser os mesmos.
  • Os elementos de anotação devem aparecer depois de todos os outros elementos filho de um determinado elemento SSDL.

Mais de um elemento de anotação pode ser filho de um determinado elemento SSDL. A partir do .NET Framework versão 4, os metadados contidos em elementos de anotação podem ser acessados em runtime usando classes no namespace System.Data.Metadata.Edm.

Exemplo

O exemplo a seguir mostra um elemento EntityType que tem um elemento de anotação (CustomElement). O exemplo também mostra um atributo de anotação aplicado à propriedade OrderId.

 <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
   <Key>
     <PropertyRef Name="OrderId" />
   </Key>
   <Property Name="OrderId" Type="int" Nullable="false"
             c:CustomAttribute="someValue"/>
   <Property Name="ProductId" Type="int" Nullable="false" />
   <Property Name="Quantity" Type="int" Nullable="false" />
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <c:CustomElement>
     Custom data here.
   </c:CustomElement>
 </EntityType>

Facetas (SSDL)

As facetas no SSDL (linguagem de definição de esquema) do repositório representam restrições em tipos de coluna especificados em elementos de propriedade. As facetas são implementadas como atributos XML em elementos Property.

A tabela a seguir descreve as facetas com suporte no SSDL:

Faceta Descrição
Ordenação Especifica a sequência de agrupamento (ou sequência de classificação) a ser usadas para executar a comparação e em ordenação operações em valores de propriedade.
FixedLength Especifica se o comprimento do valor da coluna pode variar.
MaxLength Especifica o comprimento máximo do valor da coluna.
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, DateTimee DateTimeOffset, especifica o número de dígitos para a parte fracionária de segundos do valor da coluna.
Escala Especifica o número de dígitos à direita do ponto decimal do valor da coluna.
Unicode Indica se o valor da coluna é armazenado como Unicode.