1
resposta

Desenvolvimento com base no que aprendi no curso!

Boa noite galera, não sei se posso perguntar aqui mais caso não possa por favor apaguem minha postagem...

Já sou programador e estou aproveitando o curso para desenvolver uma aplicação utilizando a tecnologia aplicada, porem estou com alguns problemas.

Eu tenho as 2 Classes abaixo

public class Usuario
    {
        public Usuario()
        {
            this.Grupos = new List<Grupo>();
            this.Cursos = new List<Curso>();
            this.Aulas = new List<AulaUsuario>();
        }

        //Key
        public int UsuarioID { get; set; }

        //Fields
        public string Email { get; set; }
        public string NomeCompleto { get; set; }
        public DateTime DataDeCadastro { get; set; }
        public bool Apagado { get; set; }

        //Virtual Properties
        public virtual ICollection<Grupo> Grupos { get; set; }
        public virtual ICollection<Curso> Cursos { get; set; }
        public virtual ICollection<AulaUsuario> Aulas { get; set; }

    }
    public enum EstadoCivil
    {
        Solteiro = 1,
        Casado = 2,
        Divorciado = 3
    }
    public enum Sexo
    {
        Masculino = 1,
        Feminino = 2
    }

E a Classe grupo:

   public class Grupo
    {
        public Grupo()
        {
            this.Usuarios = new List<Usuario>();
        }

        //Key
        public int GrupoID { get; set; }

        //Fields
        public string Descricao { get; set; }
        public DateTime DataCadastro { get; set; }
        public bool Apagado { get; set; }

        //Virtual Properties
        public virtual ICollection<Usuario> Usuarios { get; set; }
    }

No mapeamento do EF6 na classe Usuario não tenho nenhuma Relationships, porem no GrupoMAP eu tenho:

public class GrupoMap : EntityTypeConfiguration<Grupo>
    {
        public GrupoMap()
        {
            // Primary Key
            this.HasKey(t => t.GrupoID);

            // Properties

            // Table & Column Mappings

            // Relationships
            this.HasMany(t => t.Usuarios)
                .WithMany(t => t.Grupos)
                .Map(m =>
                {
                    m.ToTable("Grupos_Usuarios");
                    m.MapLeftKey("GrupoID");
                    m.MapRightKey("UsuarioID");
                });
        }
    }

O meu Json Retorna assim:

{
    "UsuarioID": 1,
    "Email": "usuario1@email.com.br",
    "NomeCompleto": "Usuario 1",
    "DataDeCadastro": "2018-03-26T00:40:08",
    "Apagado": false,
    "Grupos": [
        {
            "GrupoID": 1,
            "Descricao": "Administrador",
            "DataCadastro": "2018-03-26T00:44:32",
            "Apagado": false,
            "Usuarios": [
                {
                    "UsuarioID": 2,
                    "Email": "usuario2@email.com.br",
                    "NomeCompleto": "Usuario 2",
                    "DataDeCadastro": "2018-04-03T13:54:30",
               "Apagado": false

Oque acontece que quando eu faço uma busca de Usuario realizando o .include(p => p.Grupos) conforme abaixo:

 public IList<Usuario> ListaDeUsuarios()
        {
            var dados = context.Usuarios
                .Include(p => p.Grupos)
                .ToList();

            return dados;
        }

recebo um loop infinito no json, era pra trazer Usuario Usuario.Grupos

mas ta trazendo tb Usuario.Grupos.Usuarios

alguem pode me ajudar?

1 resposta

Diego parece um problema de referência circular. Pode tentar usar a linha de comando abaixo para parametrizar a classe dbContext criada:

DbContext.Configuration.ProxyCreationEnabled = false;

Isso fará com que o EF não tente buscar automaticamente os dados circulares evitando esse erro.

Espero ter ajudado. Abs