Maison >développement back-end >C++ >Pour initialiser ou ne pas initialiser les propriétés de navigation dans EF Core: Quelle approche est la meilleure?
Dans EF Core, il existe deux façons d'initialiser les attributs de navigation:
Méthode 1: N'initialisez pas
Cette méthode n'initialise pas les attributs de navigation dans POCO (ancien objet CLR ordinaire):
Méthode 2: Initialiser dans le constructeur
<code class="language-csharp">public class User { public int Id { get; set; } public string UserName { get; set; } public virtual ICollection<Address> Addresses { get; set; } public virtual License License { get; set; } }</code>
Cette méthode initialise les attributs de navigation dans le constructeur de POCO:
Question 1: Quelle méthode est la meilleure?Pour l'attribut de collection (tels que les adresses), il n'y a pas de différence dans la fonctionnalité un et la méthode deux dans la méthode un et la méthode deux. L'initialisation n'affecte pas la logique métier.
<code class="language-csharp">public class User { public User() { this.Addresses = new List<Address>(); //this.License = new License(); //对于引用属性,不建议初始化 } public int Id { get; set; } public string UserName { get; set; } public virtual ICollection<Address> Addresses { get; set; } public virtual License License { get; set; } }</code>
Pour les attributs de référence (tels que la licence), il n'est pas recommandé de l'utiliser. Il peut entraîner des comportements inattendus, tels que les entités vides ou les entités chargées partielles dans la base de données. Question 2: Comment déterminer la direction des attributs de navigation?
Dans une telle relation à deux voies entre l'utilisateur et la licence, si les deux classes initialisent les attributs de navigation de l'autre, Stack Overflow peut se produire. Pour éviter cela, l'un des attributs de navigation doit être supprimé (dans cet exemple, les attributs dans les sous-entités) doivent être supprimés. Cette décision doit être basée sur les règles commerciales et les orientations connexes.
Les avantages et les inconvénients sont comparés à
Méthode 1 (pas d'initialisation):
Avantages:
L'entité qui empêche la préservation de l'entité vide ou le chargé partiel
Évitez les anomalies de référence vides Facile à retarder le chargement
Inconvénients:
Avantages:
Inconvénients:
Il peut couvrir la valeur chargée ne peut pas empêcher la réparation des relations
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!