Как использовать службы объектов с пользовательскими объектами (платформа Entity Framework)
Воспользоваться функциональностью службы объектов, обеспечиваемой созданными средствами платформы Entity Framework классами данных, можно и при работе с пользовательскими классами данных. Это включает следующие возможности.
Создание экземпляра ObjectContext для конкретной модели EDM, включая заранее определенные соединения.
Свойства, возвращающие объекты ObjectQuery для конкретного типа.
Пользовательские методы, добавляющие объекты к конкретному набору сущностей.
Самый простой способ воспользоваться всеми возможностями служб объектов — это добавить в проект созданный класс, который наследуется от класса 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
При этом будет повторно создан уровень объектов в C# на основе заданного файла CSDL.
Откройте созданный файл кода, скопируйте класс, который наследуется от класса ObjectContext, и вставьте его в файл кода пользовательского класса данных.
Примечание.
Также можно удалить классы данных и добавить оставшийся класс в проект.
Использование сформированного объектного кода в проекте на языке Visual Basic
С помощью командной строки перейдите в расположение файла CSDL своей для модели и выполните следующую команду, удалив переводы строки:
%windir%\Microsoft.NET\Framework\v3.5\edmgen.exe /mode:EntityClassGeneration /incsdl:.\YourModel.csdl /outobjectlayer:.\YourModel.context.vb /language:VB
При этом будет повторно создан уровень объектов Visual Basic на основе заданного файла CSDL.
Откройте созданный файл кода, скопируйте класс, который наследуется от класса 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)
Справочник
Генератор модели EDM (EdmGen.exe)