Compartir a través de


Tipos simples (metadatos)

En el Entity Data Model (EDM), los tipos simples constan de tipos primitivos. Para obtener más información acerca de los tipos simples en el EDM, vea Tipos simples (EDM).

ADO.NET proporciona un PrimitiveType, que se deriva del SimpleType, para describir los tipos primitivos de .NET Framework, los tipos primitivos del EDM y los tipos primitivos específicos del proveedor de almacenamiento. La infraestructura de metadatos de ADO.NET administra las asignaciones entre los tipos primitivos en los modelos de objetos, conceptual y de almacenamiento. Los tipos primitivos de los modelos conceptual y de objetos siempre tienen correspondencias predeterminadas uno a uno. Los tipos primitivos del modelo de almacenamiento dependen del proveedor de almacenamiento y de la base de datos usada.

Cada proveedor de almacenamiento define sus propios tipos primitivos. La infraestructura de metadatos de ADO.NET solicita las definiciones de los tipos primitivos al proveedor de almacenamiento en tiempo de ejecución. Cada proveedor de almacenamiento debe declarar sus tipos primitivos en un documento XML denominado manifiesto del proveedor.

El archivo del manifiesto del proveedor incluye la lista de tipos primitivos del proveedor, las asignaciones entre los tipos primitivos de los modelos conceptual y de almacenamiento, y las reglas de conversión y de promoción entre los tipos primitivos de los modelos conceptual y de almacenamiento.

En el ejemplo de código siguiente se muestra cómo obtener un área de trabajo de metadatos desde la conexión que después se usa para recuperar información acerca de un tipo primitivo concreto y de todos los demás tipos primitivos del modelo especificado. Observe que el área de trabajo de metadatos es un componente del servicio en tiempo de ejecución que proporciona compatibilidad para recuperar los metadatos.

En el ejemplo de código se usa un CSpace y un SSpace para especificar los modelos. CSpace representa el nombre predeterminado del modelo conceptual. SSpace representa el nombre predeterminado del modelo de almacenamiento. En el ejemplo de código siguiente se usa la cadena de conexión que se proporciona en el archivo de configuración de la aplicación. Para obtener un ejemplo del archivo de configuración de la aplicación, vea Usar el modelo de objetos de AdventureWorks (EDM).

using System;
using System.Data;
using System.Data.EntityClient;
using System.Collections.ObjectModel;
using System.Data.Metadata.Edm;

class GetPrimitiveTypesExample
{
  static void Main()
  {
    try
    {
      // Establish a connection to the underlying data provider by 
      // using the connection string specified in the config file.
      using (EntityConnection connection = 
               new EntityConnection("Name=AdventureWorksEntities"))
      {
         // Open the connection.
         connection.Open();

         // Access the metadata workspace.
         MetadataWorkspace workspace = 
            connection.GetMetadataWorkspace();

         // Get primitive types from the conceptual model.
         GetPrimitiveTypes(workspace, DataSpace.CSpace);

         // Get primitive types from the storage model.
         GetPrimitiveTypes(workspace, DataSpace.SSpace);
      }
    }
    catch (MetadataException exceptionMetadata)
    {
        Console.WriteLine("MetadataException: {0}", 
                         exceptionMetadata.Message);
    }
    catch (System.Data.MappingException exceptionMapping)
    {
        Console.WriteLine("MappingException: {0}",
                         exceptionMapping.Message);
    }
  }

  private static void GetPrimitiveTypes(
       MetadataWorkspace workspace, DataSpace model)
  {
    // Get a collection of the primitive types.
    ReadOnlyCollection<PrimitiveType> primitiveTypes =
            workspace.GetPrimitiveTypes(model);

    // Iterate through the collection to get each primitive type.
    foreach (PrimitiveType prim in primitiveTypes)
    {
       Console.WriteLine(
          "Type BuiltInTypeKind: {0}, Type: {1}, Type in Model: {2} ",
          prim.BuiltInTypeKind, prim.ClrEquivalentType.FullName, 
          prim.FullName);

     }
  }
}
Imports System
Imports System.Data
Imports System.Data.EntityClient
Imports System.Collections.ObjectModel
Imports System.Data.Metadata.Edm

Class GetPrimitiveTypesExample
   Shared Sub Main()
      Try
       ' Establish a connection to the underlying data provider by 
       ' using the connection string specified in the config file.
       Using connection As EntityConnection = _
           New EntityConnection("Name=AdventureWorksEntities")

         ' Open the conection.
         connection.Open()

         ' Access the metadata workspace.
         Dim workspace As MetadataWorkspace = _
            connection.GetMetadataWorkspace

         ' Get primitive types from the conceptual model.
         GetPrimitiveTypes(workspace, DataSpace.CSpace)

         ' Get primitive types from the storage model.
         GetPrimitiveTypes(workspace, DataSpace.SSpace)
       End Using
      Catch exceptionMetadata As MetadataException
          Console.WriteLine("MetadataException: {0}", _
            exceptionMetadata.Message)
      Catch exceptionMapping As MappingException
         Console.WriteLine("MappingException: {0}", _
            exceptionMapping.Message)
      End Try
  End Sub

  Public Shared Sub GetPrimitiveTypes(ByVal workspace As _
            MetadataWorkspace, ByVal model As DataSpace)

    ' Get a collection of the primitive types.
    Dim primitiveTypes As ReadOnlyCollection(Of PrimitiveType) = _
       workspace.GetPrimitiveTypes(model)
    ' Iterate through the collection to get each primitive type.
     Dim prim As PrimitiveType
     For Each prim In primitiveTypes
       Console.WriteLine( _
         "Type BuiltInTypeKind: {0}, Type: {1}, Type in Model: {2} ", _
         prim.BuiltInTypeKind, prim.ClrEquivalentType.FullName, prim.FullName)
     Next
  End Sub
End Class

Vea también

Conceptos

Tipos (metadatos)
Jerarquía de tipos de metadatos
Introducción a la jerarquía de tipos de metadatos