Простые типы (метаданные)
В модели 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
См. также
Основные понятия
Типы (метаданные)
Иерархия типов метаданных
Общие сведения об иерархии типов метаданных