Les propriétés ombre sont des propriétés qui ne sont pas définies dans la classe d’entité .NET mais qui sont définies pour ce type d’entité dans le modèle EF Core. Les valeurs et états de ces attributs sont maintenus uniquement dans le suivi des changements. Les propriétés ombrées sont utiles lorsque les données d’une base de données ne doivent pas être exposées sur le type d’entité mappée. Le noyau du Entity Framework introduit un nouveau type d’attribut appelé l’attribut « ombre », qui n’existe pas dans EF 6.x.
L’attribut ombre n’est pas là. .NET entités classes. À la place, vous pouvez le configurer pour un type d’entité spécifique dans le modèle de données d’entité. Elle peut être configurée dans la méthode OnModelCreating() de la classe contexte.
Le diagramme suivant illustre l’attribut ombre.
Comme montré sur l’image ci-dessus, l’attribut ombre n’appartient pas à votre classe d’entité. Par conséquent, vous ne pouvez pas y accéder lorsque vous accédez à d’autres propriétés d’une entité. Les propriétés ombrées ne peuvent être configurées que pour les types d’entités lors de la construction du modèle de données d’entité, et elles seront également mappées aux colonnes de la base de données. La valeur et l’état de la propriété d’ombre ne sont maintenus que dans le suivi des changements.
Comprenons les aspects pratiques des propriétés d’ombre. Disons que nous devons maintenir les dates de création et de mise à jour de chaque enregistrement dans la table de la base de données. Vous avez appris à définir les dates de création et de modification des entités dans EF Core en définissant les propriétés CreatedDate et UpdatedDate dans la classe entité. Ici, nous verrons comment obtenir le même résultat en utilisant les propriétés d’ombre au lieu d’inclure les propriétés d’ombre dans la classe d’entité.
Considérons les classes suivantes pour entités étudiantes.
La classe étudiante ci-dessusLes attributs CreatedDate et UpdatedDate ne sont pas incluspour maintenir le temps de création ou de mise à jour. Nous les configurons comme propriétés d’ombre sur l’entité Étudiant.
Définir les propriétés de l’ombre
Vous pouvez utiliser la méthode OnModelCreating() pour définir des propriétés d’ombre pour les types d’entités en utilisant l’API Fluent.
La configuration suivante configure deux propriétés ombragées, CreatedDate et UpdatedDate, pour l’entité Étudiant.
Comme vous pouvez le voir, la méthode Property() est utilisée pour configurer les propriétés d’ombre. Spécifiez le nom de la propriété ombre comme une chaîne et le type comme un paramètre générique. Si le nom spécifié dans la méthode Property() correspond au nom d’une propriété existante, EF Core configurera cette propriété existante comme une propriété ombre au lieu d’introduire une nouvelle propriété ombre.
Propriétés d’ombre dans la base de données
Une fois les propriétés d’ombre définies, nous devons mettre à jour le schéma de la base de données car les propriétés d’ombre seront mappées aux colonnes correspondantes de la base de dons.
Pour ce faire, ajoutez une migration de base de données dans la console Package Manager de Visual Studio à l’aide de la commande suivante.
Le tableau Étudiant comprendra désormais deux colonnes, Date créée et Date mise à jour dans SQL Server, comme indiqué ci-dessous.
Donc, même si nous n’incluons pas ces propriétés dans la classe Student et ne les configurons pas comme des propriétés d’ombre, la base de données aura les colonnes correspondantes.
Accéder à la propriété d’ombre
Vous pouvez utiliser la méthode Property() pour obtenir ou définir la valeur de la propriété ombre dans EntityEntry. Le code suivant accède à la valeur de la propriété d’ombre.
Cependant, dans notre scénario, nous voulons définir automatiquement les valeurs de ces propriétés d’ombre sur la méthode SaveChanges() afin de ne pas avoir à les définir manuellement sur chaque objet entité. Donc, écrasez la méthode SaveChanges() dans la classe de contexte comme montré ci-dessous.
Cela définira automatiquement les valeurs pour les propriétés d’ombre CreatedDate et UpdatedDate.
Exécutez maintenant le code suivant et vérifiez les enregistrements dans la base de données.
Le code ci-dessus insérera les enregistrements suivants dans CreatedDate et UpdatedDate for Students.
Ainsi, en configurant les propriétés d’ombre, nous n’avons pas besoin de les inclure dans la classe d’entité.
Configurez les propriétés de l’ombre sur toutes les entités
Au lieu de configurer manuellement les propriétés d’ombre sur toutes les entités en même temps, vous pouvez les configurer manuellement.
Par exemple, nous pouvons configurer toutes les entités de CreatedDate et UpdatedDate la dernière fois, comme montré sur l’image suivante.
Quand utiliser la propriété d’ombre ?
L’attribut ombre peut être utilisé dans deux situations :
Lorsque vous ne souhaitez pas exposer des colonnes de base de données sur des entités mappées, comme dans le scénario décrit ci-dessus. Quand vous ne souhaitez pas exposer les attributs de la clé étrangère mais que vous souhaitez seulement utiliser les attributs de navigation pour gérer les relations. La propriété de clé étrangère sera une propriété d’ombre et sera mappée à la colonne de la base de données, mais ne sera pas exposée comme une propriété de l’entité. (Dans EF Core, si vous ne définissez pas une propriété de clé étrangère dans une classe d’entité, cela générera automatiquement une propriété d’ombre pour cela.) Vous n’avez pas besoin de configurer manuellement les propriétés des clés étrangères. )
Ressources:
La connexion hyperlientérée est visible.
La connexion hyperlientérée est visible.
|