Como salvar dados relacionadosSaving Related Data

Além de entidades isoladas, você também pode fazer uso das relações definidas no seu modelo.In addition to isolated entities, you can also make use of the relationships defined in your model.

Dica

Veja o exemplo deste artigo no GitHub.You can view this article's sample on GitHub.

Como adicionar um gráfico de novas entidadesAdding a graph of new entities

Se você criar várias novas entidades relacionadas, adicionar uma delas ao contexto fará com que as outras também sejam adicionadas.If you create several new related entities, adding one of them to the context will cause the others to be added too.

No exemplo a seguir, o blog e três postagens relacionadas estão todos inseridos no banco de dados.In the following example, the blog and three related posts are all inserted into the database. As postagens são encontradas e adicionadas, porque estão acessíveis por meio da propriedade de navegação 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();
}

Dica

Use a propriedade EntityEntry.State para definir o estado de uma única entidade.Use the EntityEntry.State property to set the state of just a single entity. Por exemplo, context.Entry(blog).State = EntityState.Modified.For example, context.Entry(blog).State = EntityState.Modified.

Se você referenciar uma nova entidade da propriedade de navegação de uma entidade que já é controlada pelo contexto, a entidade será descoberta e inserida no banco de dados.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.

No exemplo a seguir, a entidade post é inserida porque ela é adicionada à propriedade Posts da entidade blog que foi obtida do banco de dados.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();
}

Como alterar relaçõesChanging relationships

Se você alterar a propriedade de navegação de uma entidade, as alterações correspondentes serão feitas na coluna de chave estrangeira no banco de dados.If you change the navigation property of an entity, the corresponding changes will be made to the foreign key column in the database.

No exemplo a seguir, a entidade post é atualizada para pertencer à nova entidade blog porque sua propriedade de navegação Blog é configurada para apontar para 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. Observe que blog também será inserido no banco de dados porque ele é uma nova entidade referenciada pela propriedade de navegação de uma entidade que já é controlada pelo contexto (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();
}

Como remover relaçõesRemoving relationships

Você pode remover uma relação configurando uma navegação de referência como null ou removendo a entidade relacionada de uma navegação de coleção.You can remove a relationship by setting a reference navigation to null, or removing the related entity from a collection navigation.

A remoção de uma relação pode ter efeitos colaterais sobre a entidade dependente, de acordo com o comportamento de exclusão em cascata configurado na relação.Removing a relationship can have side effects on the dependent entity, according to the cascade delete behavior configured in the relationship.

Por padrão, para as relações necessárias, um comportamento de exclusão em cascata é configurado e a entidade dependente/filha será excluída do banco de dados.By default, for required relationships, a cascade delete behavior is configured and the child/dependent entity will be deleted from the database. Para relações opcionais, a exclusão em cascata não é configurada por padrão, mas a propriedade de chave estrangeira será definida como nula.For optional relationships, cascade delete is not configured by default, but the foreign key property will be set to null.

Confira Relações Obrigatórias e Opcionais para saber como a obrigatoriedade das relações pode ser configurada.See Required and Optional Relationships to learn about how the requiredness of relationships can be configured.

Confira Exclusão em Cascata para obter mais detalhes sobre como os comportamentos de exclusão em cascata funcionam, como eles podem ser configurados explicitamente e como eles são selecionados por convenção.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.

No exemplo a seguir, uma exclusão em cascata é configurada na relação entre Blog e Post, assim a entidade post é excluída do banco de dados.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();
}