Share via


Tipi semplici (metadati)

In Entity Data Model (EDM) i tipi semplici sono costituiti da tipi primitivi. Per ulteriori informazioni sui tipi semplici in EDM, vedere Tipi semplici (EDM).

ADO.NET fornisce un oggetto PrimitiveType, derivato da SimpleType per descrivere i tipi primitivi .NET Framework, i tipi primitivi EDM e tipi primitivi specifici del provider di archiviazione. L'infrastruttura dei metadati ADO.NET gestisce i mapping tra i tipi primitivi nel modello a oggetti, nel modello concettuale e nel modello di archiviazione. I tipi primitivi del modello a oggetti e del modello concettuale hanno sempre corrispondenze predefinite uno-a-uno. I tipi primitivi del modello di archiviazione dipendono dal provider di archiviazione o dal database utilizzato.

Ogni provider di archiviazione definisce tipi primitivi propri. L'infrastruttura dei metadati ADO.NET richiede le definizioni dei tipi primitivi dal provider di archiviazione in fase di esecuzione. Ogni provider di archiviazione deve dichiarare i propri tipi primitivi in un documento XML denominato file manifesto del provider.

Il file manifesto del provider include l'elenco dei tipi primitivi del provider, i mapping tra i tipi primitivi del modello concettuale e del modello di archiviazione e le regole di promozione e di conversione tra i tipi primitivi del modello concettuale e del modello di archiviazione.

Nell'esempio di codice seguente viene illustrato come ottenere un'area di lavoro metadati dalla connessione e quindi utilizzarla per recuperare informazioni su un tipo primitivo specifico e su tutti gli altri tipi primitivi nel modello specificato. Si noti che l'area di lavoro metadati è un componente del servizio di runtime che fornisce supporto per il recupero dei metadati.

Nell'esempio di codice vengono utilizzati un oggetto CSpace e un oggetto SSpace per specificare i modelli. CSpace rappresenta il nome predefinito per il modello concettuale. SSpace rappresenta il nome predefinito per il modello di archiviazione. Nell'esempio di codice viene utilizzata la stringa di connessione specificata nel file di configurazione dell'applicazione. Per un esempio del file di configurazione dell'applicazione, vedere Utilizzo del modello a oggetti di 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

Vedere anche

Concetti

Tipi (metadati)
Gerarchia dei tipi di metadati
Panoramica della gerarchia dei tipi di metadati