由对象关系(EF4)引起的Stackoverflow异常

时间:2014-12-12 11:36:55

标签: c# entity-framework stack-overflow

我发现很多帖子解释了如何解决我遇到的同样问题,但不是我的情况:

所以我有4个班级:

上下文类:ClientRerservation。 其他课程:ClientDtoReservationDto

我添加了这一行来建立类之间的关系

Mapper.CreateMap<Client, ClientDto>();
Mapper.CreateMap<Reservation, ReservationDto>();
Mapper.CreateMap<ClientDto, Client>();
Mapper.CreateMap<ReservationDto, Reservation>(); 

客户DTO课程:

public class ClientDto
{
    public int Id { get; set; }
    ...
    public virtual ICollection<ReservationDto> Reservations { get; set; }
}

预订DTO classe:

public class ReservationDto
{
    public int Id { get; set; }
    ...
    public virtual ClientDto Client{ get; set; }
}

所以,当我想从数据库中获取客户列表时:

public IEnumerable<ClientDto> GetClients(Expression<Func<ClientDto, bool>> expression, int count)
{
    return _context.Clients.Project().To<ClientDto>().Where(expression.Expand());
}

我收到此错误消息:

An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll

如果我从ClientDto classe删除预订关系,那就行了!

RelationShip:

enter image description here

1 个答案:

答案 0 :(得分:2)

正如@Ben建议的那样,您有一个循环引用:ClientDto包含ReservationDto的集合,每个ClientDto依次包含对其{{1}}所有者的反向引用。

您可以查看this question有关如何使用Automapper处理循环引用的一些想法。