Ich habe Klassen erstellt mit EF-Code zuerst, die Sammlungen voneinander haben. Instanzen:AutoMapper werfen StackOverflowException beim Aufruf von ProjectTo <T>() auf IQueryable
public class Field
{
public int Id { get; set; }
public string Name { get; set; }
public virtual List<AppUser> Teachers { get; set; }
public Field()
{
Teachers = new List<AppUser>();
}
}
public class AppUser
{
public int Id { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string UserName => Email;
public virtual List<Field> Fields { get; set; }
public AppUser()
{
Fields = new List<FieldDTO>();
}
}
DTOs:
public class FieldDTO
{
public int Id { get; set; }
public string Name { get; set; }
public List<AppUserDTO> Teachers { get; set; }
public FieldDTO()
{
Teachers = new List<AppUserDTO>();
}
}
public class AppUserDTO
{
public int Id { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string UserName => Email;
public List<FieldDTO> Fields { get; set; }
public AppUserDTO()
{
Fields = new List<FieldDTO>();
}
}
Mappings:
Mapper.CreateMap<Field, FieldDTO>();
Mapper.CreateMap<FieldDTO, Field>();
Mapper.CreateMap<AppUserDTO, AppUser>();
Mapper.CreateMap<AppUser, AppUserDTO>();
Und ich bin immer Stackoverflow wenn Sie diesen Code aufrufen (Context ist mein DbContext):
protected override IQueryable<FieldDTO> GetQueryable()
{
IQueryable<Field> query = Context.Fields;
return query.ProjectTo<FieldDTO>();//exception thrown here
}
Ich schätze, das passiert, weil es sich in Listen umschlingt, die sich gegenseitig endlos aufrufen. Aber ich verstehe nicht, warum das passiert. Sind meine Abbildungen falsch?
Du hast Recht. Das Problem ist eine Endlosschleife beim Aufruf von Mapper in Listen. Deine Abbildungen sind richtig. Sie können versuchen, Listen vor dem Konvertieren von Entitäten zu leeren. – erikscandola