Procédure: définir un contexte d'objet personnalisé (Entity Framework)
Lorsque vous utilisez des entités POCO, vous désactivez la génération de la couche objet par Entity Framework . En plus de définir des types d'entité personnalisés, vous devez définir un type de contexte d'objet personnalisé ou gérer vos propres connexions via une instance créée manuellement de EntityConnection que vous transmettez au constructeur de l'objet ObjectContext. Pour plus d'informations sur la création d'une instance de EntityConnection, consultez Procédure : générer une chaîne de connexion pour EntityConnection (Entity Framework).
Cette rubrique montre comment créer un contexte d'objet personnalisé.
Remarque : |
---|
Pour désactiver la génération de couche objet avec ADO.NET Entity Data Model Designer (Concepteur d'entités), ouvrez le fichier .edmx dans le Concepteur d'entités.Cliquez avec le bouton droit sur l'aire du concepteur, puis sélectionnez Propriétés.Dans la fenêtre Propriétés, sélectionnez la propriété Stratégie de génération de code et sélectionnez None. |
La classe de contexte d'objet personnalisé gère les entités POCO définies dans Procédure : définir des entités POCO (Entity Framework).
Un contexte d'objet personnalisé doit inclure les fonctionnalités suivantes :
possibilité d'instancier un objet ObjectContext propre à votre modèle conceptuel, y compris les connexions prédéfinies ;
propriétés qui retournent des objets ObjectSet propres à un type.
Pour plus d'informations sur la définition de types d'entité personnalisés, consultez Procédure : définir des entités POCO (Entity Framework).
Pour utiliser du code de contexte d'objet généré dans votre code de contexte d'objet personnalisé
Ajoutez un fichier de code de classe à votre projet.
Incluez les espaces de noms suivants :
System
System.Data.Objects
System.Collections.Generic
Renommez la classe POCOAdventureWorksEntities. Assurez-vous que la classe hérite de la classe ObjectContext.
Partial Public Class POCOAdventureWorksEntities Inherits ObjectContext
public partial class POCOAdventureWorksEntities : ObjectContext
Définissez des variables membres du type ObjectSet pour chaque type d'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;
Attribuez aux constructeurs la 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; }
Définissez des propriétés qui retournent des objets
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>()); } }
Exemple
Cet exemple illustre le code de contexte d'objet personnalisé qui prend en charge les classes de données personnalisées Contact, Order et 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);
}
}
Voir aussi
Référence
Concepts
Personnalisation des objets (Entity Framework)