Procedura: utilizzare Object Services con oggetti personalizzati (Entity Framework)
Anche se si utilizzano classi di dati personalizzate, è possibile sfruttare le funzionalità di Object Services fornite dalle classi di dati generate dagli strumenti di Entity Framework. Sono incluse le funzionalità seguenti:
Possibilità di creare un'istanza di un oggetto ObjectContext specifico di Entity Data Model (EDM), incluse le connessioni predefinite.
Proprietà che restituiscono oggetti ObjectQuery specifici del tipo.
Metodi personalizzati che consentono di aggiungere un oggetto a un set di entità specifico.
Il metodo più semplice per utilizzare tutte le funzionalità di Object Services consiste nell'aggiungere al progetto la classe generata che eredita da ObjectContext. Questa classe viene generata dagli strumenti di Entity Framework, in base a EDM.
Per utilizzare il codice oggetto generato in un progetto C#
Dal prompt dei comandi passare alla posizione del file CSDL (Conceptual Schema Definition Language) per il modello, quindi eseguire il comando seguente rimuovendo le interruzioni di riga:
%windir%\Microsoft.NET\Framework\v3.5\edmgen.exe /mode:EntityClassGeneration /incsdl:.\YourModel.csdl /outobjectlayer:.\YourModel.context.cs /language:CSharp
In questo modo, il livello di oggetti verrà rigenerato in C#, in base al file CSDL specificato.
Aprire il file di codice appena generato, copiare la classe che eredita da ObjectContext e incollare questa classe nel file di codice delle classi di dati personalizzate.
Nota È anche possibile rimuovere le classi di dati e aggiungere la classe rimanente al progetto.
Per utilizzare il codice oggetto generato in un progetto Visual Basic
Dal prompt dei comandi passare alla posizione del file CSDL per il modello, quindi eseguire il comando seguente rimuovendo le interruzioni di riga:
%windir%\Microsoft.NET\Framework\v3.5\edmgen.exe /mode:EntityClassGeneration /incsdl:.\YourModel.csdl /outobjectlayer:.\YourModel.context.vb /language:VB
In questo modo, il livello di oggetti verrà rigenerato in Visual Basic, in base al file CSDL specificato.
Aprire il file di codice appena generato, copiare la classe che eredita da ObjectContext e incollare questa classe nel file di codice delle classi di dati personalizzate.
Nota È anche possibile rimuovere le classi di dati e aggiungere la classe rimanente al progetto.
Esempio
In questo esempio viene illustrato il codice oggetto contestuale generato che supporta le classi di dati personalizzate Order e 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);
}
}
}
Vedere anche
Attività
Procedura: ereditare dalle classi di base EntityObject e ComplexObject (Entity Framework)
Procedura: implementare interfacce di classi di dati personalizzate (Entity Framework)