Condividi tramite


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.

Bb738471.note(it-it,VS.100).gifNota:
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

  1. Aggiungere un file di codice della classe al progetto.

  2. Includere gli spazi dei nomi seguenti:

    System

    System.Data.Objects

    System.Collections.Generic

  3. Rinominare la classe come POCOAdventureWorksEntities. Assicurarsi che la classe erediti dalla classe ObjectContext.

    Partial Public Class POCOAdventureWorksEntities
        Inherits ObjectContext
    
    public partial class POCOAdventureWorksEntities : ObjectContext
    
  4. 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;
    
  5. 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;
     }
    
  6. 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

Generatore EDM (EdmGen.exe)

Concetti

Personalizzazione di oggetti (Entity Framework)

Altre risorse

How to: Customize Object-Layer Code Generation