Como salvar dados relacionados

Além de entidades isoladas, você também pode fazer uso das relações definidas no seu modelo.

Dica

Veja o exemplo deste artigo no GitHub.

Como adicionar um gráfico de novas entidades

Se você criar várias novas entidades relacionadas, adicionar uma delas ao contexto fará com que as outras também sejam adicionadas.

No exemplo a seguir, o blog e três postagens relacionadas estão todos inseridos no banco de dados. As postagens são encontradas e adicionadas, porque estão acessíveis por meio da propriedade de navegação 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();
}

Dica

Use a propriedade EntityEntry.State para definir o estado de uma única entidade. Por exemplo, 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.

No exemplo a seguir, a entidade post é inserida porque ela é adicionada à propriedade Posts da entidade blog que foi obtida do banco de dados.

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ções

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.

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. 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).

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ções

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.

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.

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. 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.

Confira Relações Obrigatórias e Opcionais para saber como a obrigatoriedade das relações pode ser configurada.

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.

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.

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