1
resposta

Relacionamentos

Boa noite , Estou fazendo um projeto é não estou conseguindo fazer o seguinte relacionamento com o entity ,segue :

Tenho duas entidades Servidor e Ambiente, aonde um servidor pode conter vários ambientes e um ambiente pode pertencer a apenas a um servidor.

Precisaria que no retorno do ambiente ele traga as informações do servidor , e o servidor traga os ambiente cadastrados.

Poderiam me ajudar, já tentei vários formas e não consigo atender a está regra acima .

1 resposta

Bom dia. Acredido que tu queiras um relacionamento one-to-many entre duas entre duas entidades. Modelei esse relacionamento usando as entidade Departamento e Funcionario, onde um departamento pode conter vários funcionários e um funcionário pertence a somente um departamento. A lógica é a mesma.

public class Departamento
    {
        public int Id { get; set; }
        public string Descricao { get; set; }
        public bool Ativo { get; set; }       
        public List<Funcionario> Funcionarios { get; set; }

        public override string ToString()
        {
            return $"Nome: {this.Descricao} Ativo: {this.Ativo}";
        }

    }
public class Funcionario
    {
        public int Id { get; set; }
        public string Nome { get; set; }
        public string CPF { get; set; }
        public string RG { get; set; }
        public bool Ativo { get; set; } 

        public int DepartamentoId { get; set; }
        public Departamento Departamento { get; set; }
    }

Note que a propriedade public List<Funcionario> Funcionarios { get; set; } na entidade Departamento é opcional para o relacionameto, mas a sua declaração torna a busca mais fácil.

Agora um exemplo de inserção e consulta:

public static void Main()
    {

            using var db = new EmpresaContext();


            var dp = new Departamento()
            {
                Descricao = "Departamento 01",
                Ativo = true,
            };

            db.Departamentos.Add(dp);
            db.SaveChanges();

            var dep = db.Departamentos.Find(dp.Id);

            var fun1 = new Funcionario()
            {
                Nome = "Romvlo Avgvstvs",
                CPF = "14567039465",
                RG = "1120362",
                Ativo = true,
                DepartamentoId = dp.Id
            };

            db.Funcionarios.Add(fun1);

            var fun2 = new Funcionario()
            {
                Nome = "Jvlivs Caesar",
                CPF = "14567039465",
                RG = "1120362",
                Ativo = true,
                DepartamentoId = dp.Id
            };
            db.Funcionarios.Add(fun2);
            db.SaveChanges();

        var departamentos = db
                .Departamentos
                .Include(p => p.Funcionarios);        

            foreach (var departamento in departamentos)
            {

                Console.WriteLine("---------------------------------------");
                Console.WriteLine($"Departamento: {departamento.Descricao}");

                if (departamento.Funcionarios?.Any() ?? false)
                {
                    foreach (var funcionario in departamento.Funcionarios)
                    {
                        Console.WriteLine($"\tFuncionario: {funcionario.Nome}");
                    }
                }
                else
                {
                    Console.WriteLine($"\tNenhum funcionario encontrado!");
                }
            }

    }

Resultado:

IdDescricaoAtivoFuncionarios
1Departamento 01TrueSystem.Collections.Generic.List
IdNomeCPFRGAtivoDepartamentoIdDepartamento
1Romvlo Avgvstvs145670394651120362True1Nome: Departamento 01 Ativo: True
2Jvlivs Caesar145670394651120362True1Nome: Departamento 01 Ativo: True

La listagem acima o único ponto de atenção é a instrunção

var departamentos = db
                .Departamentos
                .Include(p => p.Funcionarios);

na qual eu incluo a propriedade Funcionarios para que o entity traga todos funcionário de um departamento. Pra ver rodando direto, consulte essa ulr.

Bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software