Enregistrement des données associéesSaving Related Data

En plus des entités isolées, vous pouvez également utiliser les relations définies dans votre modèle.In addition to isolated entities, you can also make use of the relationships defined in your model.

Conseil

Vous pouvez afficher cet exemple sur GitHub.You can view this article's sample on GitHub.

Ajout d’un graphique de nouvelles entitésAdding a graph of new entities

Si vous créez plusieurs nouvelles entités associées, l’ajout d’une d’elles au contexte provoquera l’ajout des autres.If you create several new related entities, adding one of them to the context will cause the others to be added too.

Dans l’exemple suivant, le blog et trois billets associés sont tous insérés dans la base de données.In the following example, the blog and three related posts are all inserted into the database. Les billets sont trouvés et ajoutés, car ils sont accessibles via la propriété de navigation Blog.Posts.The posts are found and added, because they are reachable via the Blog.Posts navigation property.

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é.Use the EntityEntry.State property to set the state of just a single entity. Par exemple, context.Entry(blog).State = EntityState.Modified.For example, 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.If you reference a new entity from the navigation property of an entity that is already tracked by the context, the entity will be discovered and inserted into the database.

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.In the following example, the post entity is inserted because it is added to the Posts property of the blog entity which was fetched from the database.

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 relationsChanging relationships

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.If you change the navigation property of an entity, the corresponding changes will be made to the foreign key column in the database.

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.In the following example, the post entity is updated to belong to the new blog entity because its Blog navigation property is set to point to 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).Note that blog will also be inserted into the database because it is a new entity that is referenced by the navigation property of an entity that is already tracked by the context (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 relationsRemoving relationships

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.You can remove a relationship by setting a reference navigation to null, or removing the related entity from a collection navigation.

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.Removing a relationship can have side effects on the dependent entity, according to the cascade delete behavior configured in the relationship.

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.By default, for required relationships, a cascade delete behavior is configured and the child/dependent entity will be deleted from the database. 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.For optional relationships, cascade delete is not configured by default, but the foreign key property will be set to null.

Consultez Relations obligatoires et facultatives pour en savoir plus sur la configuration de la nécessité des relations.See Required and Optional Relationships to learn about how the requiredness of relationships can be configured.

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.See Cascade Delete for more details on how cascade delete behaviors work, how they can be configured explicitly and how they are selected by 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.In the following example, a cascade delete is configured on the relationship between Blog and Post, so the post entity is deleted from the database.

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