型 (メタデータ)
型は、エンティティ データ モデル (EDM) の基礎を形成する最上位レベルの構造です。ADO.NET には、エンティティ フレームワーク の EDM に定義されている概念を表す型のセットを含む System.Data.Metadata.Edm 名前空間があります。エンティティ フレームワーク で使用されるモデルの詳細については、「Entity Framework のデータ モデリング」および「メタデータ ワークスペースの概要」を参照してください。
「メタデータ型の階層の概要」に説明されているように、EdmType は、EDM の型を表すクラスの基本クラスです。最上位レベルの型 (SimpleType、StructuralType、CollectionType、RefType など) は、EdmType から派生します。
SimpleType は、プリミティブ型を記述します。単純型の詳細については、「単純型 (メタデータ)」を参照してください。
StructuralType は、メンバを持つメタデータ型階層のすべての型の基本データ型です。構造型の詳細については、「構造型 (メタデータ)」を参照してください。
CollectionType は、特定の型のインスタンスのコレクションを記述します。
RefType は、エンティティを使用する操作のためにエンティティのアドレスを格納します。
「Entity Data Model の型」トピックでは、EDM での型の使用に関して詳しく説明しています。
次のコード サンプルでは、接続からメタデータ ワークスペースを取得した後、そのメタデータ ワークスペースを使用して、指定されたモデルにおける特定の型およびその他のすべての型に関する情報を取得します。このコード サンプルでは、CSpace と SSpace を使用して、モデルを指定します。CSpace は、概念モデルの既定の名前を表します。SSpace は、ストレージ モデルの既定の名前を表します。メタデータ ワークスペースは、メタデータの取得をサポートするランタイム サービス コンポーネントです。
このコード サンプルでは、「AdventureWorks Complete Model (EDM)」トピックで使用されている Adventureworks モデルを使用します。アプリケーション構成ファイルの例については、「AdventureWorks オブジェクト モデルの使用 (EDM)」を参照してください。
// The first example:
using System;
using System.Data;
using System.Data.EntityClient;
using System.Collections.ObjectModel;
using System.Data.Metadata.Edm;
class GetTypeExample
{
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 an EntityType object by using the specified type name,
// the namespace name, and the model.
EdmType departmentType1 = workspace.GetType(
"Department", "AdventureWorksModel", DataSpace.CSpace);
Console.WriteLine(
"Type found in the conceptual model Name: {0}, {1} ",
departmentType1.Name,
departmentType1.NamespaceName);
// Get an EntityType object by using the specified type name,
// the namespace name, and the model.
EdmType departmentType2 = workspace.GetType(
"Department", "AdventureWorksModel.Store",
DataSpace.SSpace);
Console.WriteLine(
"Type found in the storage model Name: {0}, {1} ",
departmentType2.Name,
departmentType2.NamespaceName);
}
}
catch (MetadataException exceptionMetadata)
{
Console.WriteLine("MetadataException: {0}",
exceptionMetadata.Message);
}
catch (System.Data.MappingException exceptionMapping)
{
Console.WriteLine("MappingException: {0}",
exceptionMapping.Message);
}
}
}
// The second example:
using System;
using System.Data;
using System.Data.EntityClient;
using System.Data.Metadata.Edm;
using System.Collections.ObjectModel;
class GetTypesExample
{
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 types from the conceptual model.
GetTypesFromModel(workspace, DataSpace.CSpace);
// Get types from the storage model.
GetTypesFromModel(workspace, DataSpace.SSpace);
}
}
catch (MetadataException exceptionMetadata)
{
Console.WriteLine("MetadataException: {0}",
exceptionMetadata.Message);
}
catch (System.Data.MappingException exceptionMapping)
{
Console.WriteLine("MappingException: {0}",
exceptionMapping.Message);
}
}
public static void GetTypesFromModel(
MetadataWorkspace workspace, DataSpace model)
{
// Get a collection of the EdmTypes.
// An EdmType class is the base class for the classes
// that represent types in the Entity Data Model (EDM).
ReadOnlyCollection<EdmType> types =
workspace.GetItems<EdmType>(model);
// Iterate through the collection to get each edm type,
// specifically each entity type.
foreach (EdmType item in types)
{
EntityType entityType = item as EntityType;
if (entityType != null)
{
Console.WriteLine("Type: {0}, Type in Model: {1} ",
item.GetType().FullName, item.FullName);
}
}
}
}
' The first example:
Imports System
Imports System.Data
Imports System.Data.EntityClient
Imports System.Data.Metadata.Edm
Class GetTypeExample
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 an EntityType object by using the specified type name,
' the namespace name, and the model.
Dim departmentType1 As EdmType = _
workspace.GetType("Department", "AdventureWorksModel", _
DataSpace.CSpace)
Console.WriteLine( _
"Type found in the conceptual model Name: {0}, {1} ", _
departmentType1.Name, _
departmentType1.NamespaceName)
' Get an EntityType object by using the specified type name,
' the namespace name, and the model.
Dim departmentType2 As EdmType = _
workspace.GetType("Department", _
"AdventureWorksModel.Store", _
DataSpace.SSpace)
Console.WriteLine( _
"Type found in the storage model Name: {0}, {1} ", _
departmentType2.Name, _
departmentType2.NamespaceName)
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
End Class
' The second example:
Imports System
Imports System.Collections.ObjectModel
Imports System.Data
Imports System.Data.EntityClient
Imports System.Data.Metadata.Edm
Class GetTypesExample
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 types from the conceptual model.
GetTypesFromModel(workspace, DataSpace.CSpace)
' Get types from the storage model.
GetTypesFromModel(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 GetTypesFromModel( _
ByVal workspace As MetadataWorkspace, ByVal model As DataSpace)
' Get a collection of the EdmTypes.
' An EdmType class is the base class for the classes
' that represent types in the Entity Data Model (EDM).
Dim types As ReadOnlyCollection(Of EdmType) = _
workspace.GetItems(Of EdmType)(model)
Dim item As EdmType
' Iterate through the collection to get each edm type,
' specifically each entity type.
For Each item In types
Dim entityType As EntityType = TryCast(item, EntityType)
If (Not entityType Is Nothing) Then
Console.WriteLine("Type: {0}, Type in Model: {1} ", _
item.GetType.FullName, item.FullName)
End If
Next
End Sub
End Class
このセクションのトピック
- 構造型 (メタデータ)
構造型およびメンバについて説明します。
- 単純型 (メタデータ)
単純型について説明します。