Procedura: definire un contesto dell'oggetto personalizzato (Entity Framework)
Quando si utilizzano entità POCO, viene disabilitata la generazione del livello oggetti da Entity Framework . Oltre a definire tipi di entità personalizzati, è necessario definire un tipo di contesto dell'oggetto personalizzato o gestire connessioni tramite un'istanza creata manualmente di EntityConnection che viene passata al costruttore dell'oggetto ObjectContext. Per ulteriori informazioni sulla creazione di un oggetto EntityConnection, vedere Procedura: compilare una stringa di connessione EntityConnection (Entity Framework).
In questo argomento viene illustrato come creare un contesto dell'oggetto personalizzato.
Nota: |
---|
Per disabilitare la generazione del livello oggetti con ADO.NET Entity Data Model Designer (Entity Designer), aprire il file con estensione edmx in Entity Designer.Fare clic con il pulsante destro del mouse nell'area di progettazione e scegliere Proprietà.Nella finestra Proprietà selezionare la proprietà Strategia di generazione del codice e quindi None. |
La classe del contesto dell'oggetto personalizzata consente di gestire le entità POCO definite in Procedura: definire entità POCO (Entity Framework).
Un contesto dell'oggetto personalizzato deve includere la funzionalità seguente:
Possibilità di creare un'istanza di un oggetto ObjectContext specifico del modello concettuale, incluse le connessioni predefinite.
Proprietà che restituiscono oggetti ObjectSet specifici del tipo.
Per ulteriori informazioni sulla definizione di tipi di entità personalizzati, vedere Procedura: definire entità POCO (Entity Framework).
Per utilizzare codice del contesto dell'oggetto generato nel codice del contesto dell'oggetto personalizzato
Aggiungere un file di codice della classe al progetto.
Includere gli spazi dei nomi seguenti:
System
System.Data.Objects
System.Collections.Generic
Rinominare la classe come POCOAdventureWorksEntities. Assicurarsi che la classe erediti dalla classe ObjectContext.
Partial Public Class POCOAdventureWorksEntities Inherits ObjectContext
public partial class POCOAdventureWorksEntities : ObjectContext
Definire le variabili membro del tipo ObjectSet per ogni tipo di entità POCO:
Private _contacts As ObjectSet(Of Contact) Private _lineItems As ObjectSet(Of LineItem) Private _orders As ObjectSet(Of Order)
private ObjectSet<Contact> _contacts; private ObjectSet<LineItem> _lineItems; private ObjectSet<Order> _orders;
Definire i costruttori nella classe POCOAdventureWorksEntities.
Public Sub New() MyBase.New("name=AdventureWorksEntities", "AdventureWorksEntities") Me.ContextOptions.LazyLoadingEnabled = True End Sub Public Sub New(ByVal connectionString As String) MyBase.New(connectionString, "AdventureWorksEntities") Me.ContextOptions.LazyLoadingEnabled = True End Sub
public POCOAdventureWorksEntities() : base("name=AdventureWorksEntities", "AdventureWorksEntities") { this.ContextOptions.LazyLoadingEnabled = true; } public POCOAdventureWorksEntities(string connectionString) : base(connectionString, "AdventureWorksEntities") { this.ContextOptions.LazyLoadingEnabled = true; }
Definire le proprietà che restituiscono oggetti
ObjectSet
.Public ReadOnly Property Contacts() As ObjectSet(Of Contact) Get Return If(_contacts, MyBase.CreateObjectSet(Of Contact)()) End Get End Property Public ReadOnly Property LineItems() As ObjectSet(Of LineItem) Get Return If(_lineItems, MyBase.CreateObjectSet(Of LineItem)()) End Get End Property Public ReadOnly Property Orders() As ObjectSet(Of Order) Get Return If(_orders, MyBase.CreateObjectSet(Of Order)()) End Get End Property
public ObjectSet<Contact> Contacts { get { return _contacts ?? (_contacts = base.CreateObjectSet<Contact>()); } } public ObjectSet<LineItem> LineItems { get { return _lineItems ?? (_lineItems = base.CreateObjectSet<LineItem>()); } } public ObjectSet<Order> Orders { get { return _orders ?? (_orders = base.CreateObjectSet<Order>()); } }
Esempio
In questo esempio viene illustrato il codice del contesto dell'oggetto personalizzato che supporta le classi di dati personalizzate Contact, Order e LineItem.
Partial Public Class POCOAdventureWorksEntities
Inherits ObjectContext
Private _contacts As ObjectSet(Of Contact)
Private _lineItems As ObjectSet(Of LineItem)
Private _orders As ObjectSet(Of Order)
#Region "Constructors"
Public Sub New()
MyBase.New("name=AdventureWorksEntities", "AdventureWorksEntities")
Me.ContextOptions.LazyLoadingEnabled = True
End Sub
Public Sub New(ByVal connectionString As String)
MyBase.New(connectionString, "AdventureWorksEntities")
Me.ContextOptions.LazyLoadingEnabled = True
End Sub
#End Region
#Region "ObjectSet Properties"
Public ReadOnly Property Contacts() As ObjectSet(Of Contact)
Get
Return If(_contacts, MyBase.CreateObjectSet(Of Contact)())
End Get
End Property
Public ReadOnly Property LineItems() As ObjectSet(Of LineItem)
Get
Return If(_lineItems, MyBase.CreateObjectSet(Of LineItem)())
End Get
End Property
Public ReadOnly Property Orders() As ObjectSet(Of Order)
Get
Return If(_orders, MyBase.CreateObjectSet(Of Order)())
End Get
End Property
#End Region
Public Overloads Overrides Function SaveChanges(ByVal options As SaveOptions) As Integer
For Each entry As ObjectStateEntry In ObjectStateManager.GetObjectStateEntries(EntityState.Added Or EntityState.Modified)
' Validate the objects in the Added and Modified state
' if the validation fails throw an exeption.
Next
Return MyBase.SaveChanges(options)
End Function
End Class
public partial class POCOAdventureWorksEntities : ObjectContext
{
private ObjectSet<Contact> _contacts;
private ObjectSet<LineItem> _lineItems;
private ObjectSet<Order> _orders;
#region Constructors
public POCOAdventureWorksEntities()
: base("name=AdventureWorksEntities", "AdventureWorksEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
}
public POCOAdventureWorksEntities(string connectionString)
: base(connectionString, "AdventureWorksEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
}
#endregion
#region ObjectSet Properties
public ObjectSet<Contact> Contacts
{
get
{
return _contacts ?? (_contacts = base.CreateObjectSet<Contact>());
}
}
public ObjectSet<LineItem> LineItems
{
get
{
return _lineItems ?? (_lineItems = base.CreateObjectSet<LineItem>());
}
}
public ObjectSet<Order> Orders
{
get
{
return _orders ?? (_orders = base.CreateObjectSet<Order>());
}
}
#endregion
public override int SaveChanges(SaveOptions options)
{
foreach (ObjectStateEntry entry in
ObjectStateManager.GetObjectStateEntries(
EntityState.Added | EntityState.Modified))
{
// Validate the objects in the Added and Modified state
// if the validation fails throw an exeption.
}
return base.SaveChanges(options);
}
}
Vedere anche
Riferimento
Concetti
Personalizzazione di oggetti (Entity Framework)