AutoMapper werfen StackOverflowException beim Aufruf ProjectTo<T>() auf IQueryable

Ich habe Klassen erstellt mit EF Code First, die Sammlungen des jeweils anderen.
Personen:

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>();
    }
}

Zuordnungen:

Mapper.CreateMap<Field, FieldDTO>();
Mapper.CreateMap<FieldDTO, Field>();
Mapper.CreateMap<AppUserDTO, AppUser>();
Mapper.CreateMap<AppUser, AppUserDTO>();

Und ich bin immer StackOverflowException beim aufrufen dieser code (Kontext-ist mein dbContext):

protected override IQueryable<FieldDTO> GetQueryable()
{
    IQueryable<Field> query = Context.Fields;
    return query.ProjectTo<FieldDTO>();//exception thrown here
}

Ich denke, dies geschieht, weil es eine Schleife in den Listen, indem Sie jedes andere endlos. Aber ich verstehe nicht, warum dies geschieht. Sind meine Zuordnungen falsch?

  • Du hast Recht. Das problem ist eine Endlosschleife beim Aufruf mapper auf den Listen. Deine Zuordnungen richtig sind. Sie können versuchen, die leere Listen vor der Konvertierung von Entitäten.
InformationsquelleAutor Peter | 2016-05-16
Schreibe einen Kommentar