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

Vous pouvez afficher cet exemple sur GitHub.

Ajout d’un graphique de nouvelles entités

Si vous créez plusieurs nouvelles entités associées, l’ajout d’une d’elles au contexte provoquera l’ajout des autres.

Dans l’exemple suivant, le blog et trois billets associés 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 navigation Blog.Posts.

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);
    context.SaveChanges();
}

Conseil

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é qui est déjà suivie par le contexte, l’entité est 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 propriété Posts de l’entité blog qui a été récupérée à partir de la base de données.

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

    blog.Posts.Add(post);
    context.SaveChanges();
}

Modification de relations

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

Dans l’exemple suivant, l’entité post est mise à jour pour appartenir à la nouvelle entité blog, car sa propriété de navigation Blog est définie pour pointer vers blog. Notez que blog est également inséré dans la base de données, car il s’agit d’une nouvelle entité qui est 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 = context.Posts.First();

    post.Blog = blog;
    context.SaveChanges();
}

Suppression de relations

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

Supprimer 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é dépendante/enfant est supprimée de la base de données. La suppression en cascade n’est pas configurée pour les relations facultatives par défaut, mais la propriété de clé étrangère est définie avec la valeur null.

Consultez Relations obligatoires et facultatives pour en savoir plus sur la configuration de la nécessité des relations.

Consultez Suppression en cascade pour plus d’informations sur la façon dont les comportements de suppression en cascade fonctionnent, dont ils peuvent être configurés explicitement ou encore être sélectionnés par convention.

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

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

    blog.Posts.Remove(post);
    context.SaveChanges();
}