Entity Framework 6: Ajout d'un objet enfant à la liste des parents par rapport à la définition de la propriété de navigation de l'enfant au parent
J'ai une base de données existante avec deux tables MailServers
et MailDomains
. MailDomains
a la colonne de la clé étrangère MailServerId
pointant vers le Id
colonne de clé primaire dans MailServers
. Nous avons donc un un-à-plusieurs-relation ici.
J'ai suivi cet article et créé mon Entity Framework POCOs via le "premier Code de base de données" modèle dans le Modèle de Données d'Entité de l'Assistant. Ce produit les deux classes C#:
public partial class MailServer
{
public MailServer()
{
MailDomains = new HashSet<MailDomain>();
}
public int Id { get; set; }
public virtual ICollection<MailDomain> MailDomains { get; set; }
}
public partial class MailDomain
{
public MailDomain()
{
}
public int Id { get; set; }
public string DomainName { get; set; }
public int MailServerId { get; set; }
public virtual MailServer MailServer { get; set; }
}
Maintenant, ma question est de savoir si il y a une différence entre les deux approches suivantes de la création et l'insertion de nouveaux objets de la base de données.
Approche (A): l'Ajout de nouvelles de l'enfant du parent à la liste:
var mailServer = new MailServer();
var mailDomain = new MailDomain() {
DomainName = "foobar.net",
};
mailServer.MailDomains.Add(mailDomain);
using(var context = new MyContext){
context.MailServers.Add(mailServer);
context.SaveChanges();
}
Approche (B): la définition de l'enfant à une propriété de navigation pour le parent:
var mailServer = new MailServer();
var mailDomain = new MailDomain() {
DomainName = "foobar.net",
MailServer = mailServer,
};
using(var context = new MyContext){
context.MailDomains.Add(mailDomain);
context.SaveChanges();
}
J'ai aussi supposer que dans l'approche (A) le nouveau MailDomain
instance est automatiquement ajouté à la collection context.MailDomains
tandis que dans l'approche (B) la nouvelle MailServer
instance est automatiquement ajouté à la collection context.MailServers
. Est-ce correct ou dois-je le faire manuellement?
Donc encore une fois, ma question est la suivante: les deux approches sont-ils interchangeables?
Il confond tout simplement moi que dans la base de données il n'y a qu'une seule propriété/colonne à définir (à savoir la clé étrangère dans MailDomains
) alors que dans le code C# il y a deux propriétés (un dans chaque catégorie) et susceptibles d'être modifiés.
source d'informationauteur Joerg
Vous devez vous connecter pour publier un commentaire.
Oui, les deux approches sont interchangeables. Cela vous permet de créer et de sauvegarder le graphe d'objet de la base de données à partir soit du point de vue de la MailServer ou le domaine de mail.
Si vous n'code-tout d'abord, vous avez la possibilité de supprimer les propriétés et les mappages s'ils ne sont pas nécessaires.
Cela dépend de ce que tu veux dire par "ajouté au contexte". Si vous voulez dire: est-il automatiquement sauvegardé dans la base de données lorsque vous persistez, la réponse est oui. Un des grands avantages de l'utilisation d'un ORM comme EF est qu'il gère l'enregistrement complet d'un objet graphique automatiquement (et la synchronisation PC/FK relations, etc.).
Si vous voulez dire: l'entité disponibles par l'intermédiaire du contexte avant de l'enregistrer, je ne crois pas (je ne suis pas sûr à 100%).