Partager via


Enregistrement des données associées

En plus des entités isolées, vous pouvez également utiliser les relations définies dans votre modèle.

Conseil / Astuce

Vous pouvez afficher l’exemple de cet article sur GitHub.

Ajout d’un graphique de nouvelles entités

Si vous créez plusieurs entités associées, l’ajout de l’une d’entre elles au contexte entraîne également l’ajout des autres entités.

Dans l’exemple suivant, le blog et trois billets connexes sont tous insérés dans la base de données. Les billets sont trouvés et ajoutés, car ils sont accessibles via la propriété de Blog.Posts navigation.

using (var context = new BloggingContext())
{
    var blog = new Blog
    {
        Url = "http://blogs.msdn.com/dotnet",
        Posts = new List<Post>
        {
            new Post { Title = "Intro to C#" },
            new Post { Title = "Intro to VB.NET" },
            new Post { Title = "Intro to F#" }
        }
    };

    context.Blogs.Add(blog);
    await context.SaveChangesAsync();
}

Conseil / Astuce

Utilisez la propriété EntityEntry.State pour définir l’état d’une seule entité. Par exemple : context.Entry(blog).State = EntityState.Modified.

Si vous référencez une nouvelle entité à partir de la propriété de navigation d’une entité déjà suivie par le contexte, l’entité sera découverte et insérée dans la base de données.

Dans l’exemple suivant, l’entité post est insérée, car elle est ajoutée à la Posts propriété de l’entité blog extraite de la base de données.

using (var context = new BloggingContext())
{
    var blog = await context.Blogs.Include(b => b.Posts).FirstAsync();
    var post = new Post { Title = "Intro to EF Core" };

    blog.Posts.Add(post);
    await context.SaveChangesAsync();
}

Modification des relations

Si vous modifiez la propriété de navigation d’une entité, les modifications correspondantes sont apportées à la colonne de clé étrangère de la base de données.

Dans l’exemple suivant, l’entité post est mise à jour pour appartenir à la nouvelle blog entité, car sa Blog propriété de navigation est définie sur .blog Notez que blog sera également inséré dans la base de données, car il s’agit d’une nouvelle entité référencée par la propriété de navigation d’une entité déjà suivie par le contexte (post).

using (var context = new BloggingContext())
{
    var blog = new Blog { Url = "http://blogs.msdn.com/visualstudio" };
    var post = await context.Posts.FirstAsync();

    post.Blog = blog;
    await context.SaveChangesAsync();
}

Suppression des relations

Vous pouvez supprimer une relation en définissant la navigation de référence sur null ou en retirant l’entité associée d’une navigation de collection.

La suppression d’une relation peut avoir des effets secondaires sur l’entité dépendante, en fonction du comportement de suppression en cascade configuré dans la relation.

Par défaut, pour les relations requises, un comportement de suppression en cascade est configuré et l’entité enfant/dépendante est supprimée de la base de données. Pour les relations facultatives, la suppression en cascade n’est pas configurée par défaut, mais la propriété de clé étrangère est définie sur Null.

Consultez Les relations obligatoires et facultatives pour en savoir plus sur la façon dont les relations requises peuvent être configurées.

Voir Suppression en Cascade pour plus de détails sur le fonctionnement des comportements de suppression en cascade, comment ils peuvent être configurés explicitement et comment ils sont sélectionnés par convention.

Dans l’exemple suivant, une suppression en cascade est configurée sur la relation entre Blog et Post, de sorte que l’entité post est supprimée de la base de données.

using (var context = new BloggingContext())
{
    var blog = await context.Blogs.Include(b => b.Posts).FirstAsync();
    var post = blog.Posts.First();

    blog.Posts.Remove(post);
    await context.SaveChangesAsync();
}