I have the following classes:
public class ListaGrupo : EntidadeBase
{
public ListaGrupo()
{
Items = new List<ListaGrupoItem>();
}
public int Id { get; set; }
public string Nome { get; set; }
public virtual ICollection<ListaGrupoItem> Items { get; set; }
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append("Id = " + Id + ";");
sb.Append("Nome = " + Nome + ";");
return sb.ToString();
}
}
public class ListaGrupoItem : EntidadeBase
{
public int Id { get; set; }
public int ListaGrupoId { get; set; }
public string Nome { get; set; }
public virtual ListaGrupo Grupo { get; set; }
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append("Id = " + Id + ";");
sb.Append("Nome = " + Nome + ";");
sb.Append("GrupoId = " + ListaGrupoId + ";");
sb.Append("Grupo: {" + Grupo.ToString() + "};");
return sb.ToString();
}
}
In EF configuration look like this:
public class ListaGrupoConfiguracao : EntityTypeConfiguration<ListaGrupo>
{
public ListaGrupoConfiguracao()
{
// Chave Primária
HasKey(t => t.Id);
// Propriedades
Property(t => t.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(t => t.Nome).IsRequired().HasMaxLength(100);
// Mapeamento para as tabelas do banco
ToTable("lista_grupo");
Property(t => t.Id).HasColumnName("id");
Property(t => t.Nome).HasColumnName("nome");
// Relacionamentos
}
}
public class ListaGrupoItemConfiguracao : EntityTypeConfiguration<ListaGrupoItem>
{
public ListaGrupoItemConfiguracao()
{
// Chave Primária
HasKey(t => t.Id);
// Propriedades
Property(t => t.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(t => t.Nome).IsRequired().HasMaxLength(100);
// Mapeamento para as tabelas do banco
ToTable("lista_grupo_item");
Property(t => t.Id).HasColumnName("id");
Property(t => t.ListaGrupoId).HasColumnName("id_grupo");
Property(t => t.Nome).HasColumnName("nome");
// Relacionamentos
HasRequired(i => i.Grupo).WithMany(g => g.Items).HasForeignKey(i => i.ListaGrupoId);
// 1 para N
//HasMany<Estabelecimento>(i => i.EstabelecimentoTipo).WithRequired(e => e.Tipo).HasForeignKey(e => e.TipoId);
}
}
Finally in Controller I'm cast:
public ActionResult Index()
{
try
{
var x = _listaGrupoItemAppServico.BuscarTodos();
var listaGrupoItemViewModel = Mapper.Map<IEnumerable<ListaGrupoItem>, IEnumerable<ListaGrupoItemViewModel>>(x);
return View(listaGrupoItemViewModel);
}
catch (Exception ex)
{
log.Error("Erro no Index do controller Estabelecimento", ex);
return View();
}
}
When you run Mapper.Map from an error and the application stops executing, neither does catch catch. If in my mapping I leave it like this:
HasRequired(i => i.Grupo).WithMany().HasForeignKey(i => i.ListaGrupoId);
It does not give the error, but it creates another ID_GroupList with foreign key in the database. I've been days with this problem. Has anyone ever experienced this? I've downgraded Autommaper and it did not work.
Error message:
An unhandled exception of type 'System.StackOverflowException' occurred in AutoMapper.dll