Partilhar via


Salvando dados relacionados

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

Sugestão

Você pode visualizar a amostra do deste artigo no GitHub.

Adicionando 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 são inseridas no banco de dados. Os posts são encontrados e adicionados porque são acessíveis através 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);
    await context.SaveChangesAsync();
}

Sugestão

Use a propriedade EntityEntry.State para definir o estado de apenas uma única entidade. Por exemplo, context.Entry(blog).State = EntityState.Modified.

Se você fizer referência a uma nova entidade a partir da propriedade de navegação de uma entidade que já está rastreada pelo contexto, a entidade será descoberta e inserida no banco de dados.

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

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

Mudar as 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 post entidade é atualizada para pertencer à nova blog entidade porque sua Blog propriedade de navegação está definida como apontar para blog. Observe que blog também será inserido no banco de dados porque é uma nova entidade que é referenciada pela propriedade de navegação de uma entidade que já está rastreada pelo contexto (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();
}

Removendo relacionamentos

Você pode remover um relacionamento definindo 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 na entidade dependente, de acordo com o comportamento de exclusão em cascata configurado na relação.

Por padrão, para relacionamentos necessários, um comportamento de exclusão em cascata é configurado e a entidade filho/dependente 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 null.

Consulte Relações obrigatórias e opcionais para saber como a exigibilidade das relações pode ser configurada.

Consulte 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 são selecionados por convenção.

No exemplo a seguir, uma exclusão em cascata é configurada na relação entre Blog e Post, para que a post entidade seja excluída do banco de dados.

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