1
resposta

Relacionamentos entre tabelas

Olá, estou iniciando um projeto, e comecei utilizando pela primeira vez o novo EF Core, por questão de performasse, porem ainda tem algumas coisas que não encontrei na internet que gostaria de fazer.

No meu projeto eu tenho 3 classes

Usuarios - Base

UsuarioRole - Regras de usuarios

UsuarioConta - Informações da conta do usuario

Processos - Processos do sistema

Usuario + roles = 1 usuario pode ter varias roles, e 1 role pode ser de varios usuario; Relacionamento de N : N

Usuario + Conta = 1 usuario pode ter 1 conta, e 1 conta pode ser de 1 usuario; Relacionamento de 1 : 1

Usuario + Processo = 1 usuario pode ter varios processos, e 1 processo pode ser de 1 usuario; Relacionamento de N : 1

Estou utilizando a interface IEntityTypeConfiguration, para fazer as configurações separadas.

Gostaria de saber, como eu faço esses relacionamentos utilizando o FluentApi

1 resposta

Olá Guilherme,

para configurar estes relacionamentos com o Fluent API precisa definir como é a relação entre as classes no método

protected override void OnModelCreating(Modelbuilder modelBuilder)

Basicamente dentro deste método você chamará com o modelBuilder o método Entity<>() que marcará uma classe que você deseja mapear um relacionamento, por exemplo a Usuario.

Depois deste método você pode chamar dois métodos, HasMany que diria que esta classe tem muitos de outra ou HasOne que diz que esta classe tem apenas um de outra. Como você disse, um Usuario tem vários Processos, então ficaria algo assim:

 modelBuilder.Entity<Usuario>()
        .HasMany(u => u.Processos)

Depois de dizer deste lado se é many ou one com um dos métodos Has, agora você precisa dizer se do outro lado é many ou one. Para isso você terá o método WithMany e WithOne. Como você comentou o Processo tem apenas 1 Usuario, então a configuração completa seria:

 modelBuilder.Entity<Usuario>()
    .HasMany(u => u.Processos)
    .WithOne(p => p.Usuario);

Basicamente para mapear com o fluent api você precisará combinar as chamadas destes métodos.

Tem este tutorial que mostra alguns exemplos de como fazer também:

  1. One to One https://www.learnentityframeworkcore.com/configuration/one-to-one-relationship-configuration
  2. One to Many https://www.learnentityframeworkcore.com/configuration/one-to-many-relationship-configuration
  3. Many to Many https://www.learnentityframeworkcore.com/configuration/many-to-many-relationship-configuration