カスタム データ クラスを使用する場合でも、Entity Framework のツールで生成されたデータ クラスによって提供される Object Services の機能を利用できます。たとえば、次のような機能が挙げられます。
定義済みの接続など、Entity Data Model (EDM) に固有の ObjectContext をインスタンス化する機能。
型固有の ObjectQuery オブジェクトを返すプロパティ。
オブジェクトを特定のエンティティ セットに追加するカスタム メソッド。
Object Services の機能を最大限に活用するための最も簡単な方法は、ObjectContext から継承される生成済みクラスをプロジェクトに追加することです。このクラスは、Entity Framework のツールにより、指定された EDM に基づいて生成されます。
生成されたオブジェクト コードを C# プロジェクトで使用するには
コマンド プロンプトで、モデルの概念スキーマ定義言語 (CSDL) ファイルが格納されている場所に移動し、次のコマンドを実行します。なお、改行は削除してください。
%windir%\Microsoft.NET\Framework\v3.5\edmgen.exe /mode:EntityClassGeneration /incsdl:.\YourModel.csdl /outobjectlayer:.\YourModel.context.cs /language:CSharp
これにより、指定された CSDL ファイルに基づいて、C# のオブジェクト レイヤが生成されます。
新たに生成されたコード ファイルを開き、ObjectContext を継承するクラスをコピーして、カスタム データ クラスのコード ファイルに貼り付けます。
[!メモ]
データ クラスを削除し、残りのクラスをプロジェクトに追加することもできます。
生成されたオブジェクト コードを Visual Basic プロジェクトで使用するには
コマンド プロンプトで、モデルの CSDL ファイルが格納されている場所に移動し、次のコマンドを実行します。なお、改行は削除してください。
%windir%\Microsoft.NET\Framework\v3.5\edmgen.exe /mode:EntityClassGeneration /incsdl:.\YourModel.csdl /outobjectlayer:.\YourModel.context.vb /language:VB
これにより、指定された CSDL ファイルに基づいて、Visual Basic のオブジェクト レイヤが生成されます。
新たに生成されたコード ファイルを開き、ObjectContext を継承するクラスをコピーして、カスタム データ クラスのコード ファイルに貼り付けます。
[!メモ]
データ クラスを削除し、残りのクラスをプロジェクトに追加することもできます。
例
次の例は、Order と LineItem のカスタム データ クラスをサポートする、生成されたオブジェクト コンテキスト コードを示しています。
Option Strict Off
Option Explicit On
<Assembly: Global.System.Data.Objects.DataClasses.EdmSchemaAttribute("9f3bb474-6454-4ff1-911e-4a8be227e97c")>
Namespace Microsoft.Samples.Edm
'''<summary>
'''There are no comments for SalesOrdersEntities in the schema.
'''</summary>
Partial Public Class SalesOrdersEntities
Inherits Global.System.Data.Objects.ObjectContext
'''<summary>
'''Initializes a new SalesOrdersEntities object using the connection string found in the 'SalesOrdersEntities' section of the application configuration file.
'''</summary>
Public Sub New()
MyBase.New("name=SalesOrdersEntities", "SalesOrdersEntities")
End Sub
'''<summary>
'''Initialize a new SalesOrdersEntities object.
'''</summary>
Public Sub New(ByVal connectionString As String)
MyBase.New(connectionString, "SalesOrdersEntities")
End Sub
'''<summary>
'''Initialize a new SalesOrdersEntities object.
'''</summary>
Public Sub New(ByVal connection As Global.System.Data.EntityClient.EntityConnection)
MyBase.New(connection, "SalesOrdersEntities")
End Sub
'''<summary>
'''There are no comments for LineItem in the schema.
'''</summary>
<Global.System.ComponentModel.BrowsableAttribute(False)> _
Public ReadOnly Property LineItem() As Global.System.Data.Objects.ObjectQuery(Of LineItem)
Get
If (Me._LineItem Is Nothing) Then
Me._LineItem = MyBase.CreateQuery(Of LineItem)("[LineItem]")
End If
Return Me._LineItem
End Get
End Property
Private _LineItem As Global.System.Data.Objects.ObjectQuery(Of LineItem) = Nothing
'''<summary>
'''There are no comments for Order in the schema.
'''</summary>
<Global.System.ComponentModel.BrowsableAttribute(False)> _
Public ReadOnly Property Order() As Global.System.Data.Objects.ObjectQuery(Of Order)
Get
If (Me._Order Is Nothing) Then
Me._Order = MyBase.CreateQuery(Of Order)("[Order]")
End If
Return Me._Order
End Get
End Property
Private _Order As Global.System.Data.Objects.ObjectQuery(Of Order) = Nothing
'''<summary>
'''There are no comments for LineItem in the schema.
'''</summary>
Public Sub AddToLineItem(ByVal lineItem As LineItem)
MyBase.AddObject("LineItem", lineItem)
End Sub
'''<summary>
'''There are no comments for Order in the schema.
'''</summary>
Public Sub AddToOrder(ByVal order As Order)
MyBase.AddObject("Order", order)
End Sub
End Class
End Namespace
[assembly: System.Data.Objects.DataClasses.EdmSchemaAttribute()]
namespace Microsoft.Samples.Edm
{
/// <summary>
/// There are no comments for SalesOrdersEntities in the schema.
/// </summary>
public partial class SalesOrdersEntities : global::System.Data.Objects.ObjectContext
{
/// <summary>
/// Initializes a new SalesOrdersEntities object using the connection string found in the 'SalesOrdersEntities' section of the application configuration file.
/// </summary>
public SalesOrdersEntities() :
base("name=SalesOrdersEntities", "SalesOrdersEntities")
{
}
/// <summary>
/// Initialize a new SalesOrdersEntities object.
/// </summary>
public SalesOrdersEntities(string connectionString) :
base(connectionString, "SalesOrdersEntities")
{
}
/// <summary>
/// Initialize a new SalesOrdersEntities object.
/// </summary>
public SalesOrdersEntities(global::System.Data.EntityClient.EntityConnection connection) :
base(connection, "SalesOrdersEntities")
{
}
/// <summary>
/// There are no comments for LineItem in the schema.
/// </summary>
[global::System.ComponentModel.BrowsableAttribute(false)]
public global::System.Data.Objects.ObjectQuery<LineItem> LineItem
{
get
{
if ((this._LineItem == null))
{
this._LineItem = base.CreateQuery<LineItem>("[LineItem]");
}
return this._LineItem;
}
}
private global::System.Data.Objects.ObjectQuery<LineItem> _LineItem = null;
/// <summary>
/// There are no comments for Order in the schema.
/// </summary>
[global::System.ComponentModel.BrowsableAttribute(false)]
public global::System.Data.Objects.ObjectQuery<Order> Order
{
get
{
if ((this._Order == null))
{
this._Order = base.CreateQuery<Order>("[Order]");
}
return this._Order;
}
}
private global::System.Data.Objects.ObjectQuery<Order> _Order = null;
/// <summary>
/// There are no comments for LineItem in the schema.
/// </summary>
public void AddToLineItem(LineItem lineItem)
{
base.AddObject("LineItem", lineItem);
}
/// <summary>
/// There are no comments for Order in the schema.
/// </summary>
public void AddToOrder(Order order)
{
base.AddObject("Order", order);
}
}
}
参照
処理手順
EntityObject および ComplexObject 基本クラスを継承する方法 (Entity Framework)
カスタム データ クラス インターフェイスを実装する方法 (Entity Framework)