Поделиться через


Простые типы (метаданные)

В модели Entity Data Model (EDM) простые типы состоят из типов-примитивов. Дополнительные сведения о простых типах в модели EDM см. в разделе Простые типы (модель EDM).

ADO.NET предоставляет тип PrimitiveType, который является производным от типа SimpleType и используется для описания типов-примитивов .NET Framework, типов-примитивов модели EDM, а также типов-примитивов поставщика хранения. Инфраструктура метаданных ADO.NET обеспечивает сопоставления типов-примитивов между моделью объектов, концептуальной моделью и моделью хранения. Типы-примитивы модели объектов и концептуальной модели всегда по умолчанию сопоставляются «один к одному». Типы-примитивы модели хранения зависят от того, какой используется поставщик хранения или база данных.

Каждый поставщик хранения определяет собственные типы-примитивы. Во время выполнения инфраструктуре метаданных ADO.NET требуются определения типов-примитивов от поставщика хранения. Каждый поставщик хранения должен объявить свои типы-примитивы в XML-документе под названием «манифест поставщика».

Файл манифеста поставщика содержит список типов-примитивов этого поставщика, сопоставления типов-примитивов концептуальной модели и модели хранения, а также правила повышения и преобразования типов-примитивов концептуальной модели и модели хранения.

В приведенном далее образце кода показано, как из этой связи получить рабочую область метаданных, а затем использовать ее для извлечения информации об определенном примитивном типе и всех остальных типах-примитивах в указанной модели. Обратите внимание, что рабочая область метаданных — это служебный компонент времени выполнения, который обеспечивает поддержку извлечения метаданных.

В образце кода для задания моделей используются CSpace и SSpace. Элемент CSpace представляет собой имя по умолчанию для концептуальной модели. Имя SSpace используется по умолчанию для модели хранения. В данном образце кода использована строка соединения, которая приведена в файле конфигурации приложения. Пример файла конфигурации приложения см. в разделе Использование модели объектов 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

См. также

Основные понятия

Типы (метаданные)
Иерархия типов метаданных
Общие сведения об иерархии типов метаданных