Referencia circular que causa el desbordamiento de la stack con Automapper

Estoy usando Automapper para asignar mis objetos proxy de NHibernate (DTO) a mis objetos comerciales de CSLA

Estoy usando Fluent NHibernate para crear las asignaciones, esto funciona bien

El problema que tengo es que la Order tiene una colección de OrderLines y cada una de ellas tiene una referencia a Order .

 public class OrderMapping : ClassMap { public OrderMapping() { // Standard properties Id(x => x.OrderId); Map(x => x.OrderDate); Map(x => x.Address); HasMany(x => x.OrderLines).KeyColumn("OrderId").Inverse(); Table("`Order`"); } } public class OrderDTO { // Standard properties public virtual int OrderId { get; set; } public virtual DateTime OrderDate { get; set; } public virtual string Address { get; set; } // Child collection properties public virtual IList OrderLines { get; set; } <-- this refs the lines } 

y:

 public class OrderLineMapping : ClassMap { public OrderLineMapping() { // Standard properties Id(x => x.OrderLineId); References(x => x.Order).Column("OrderId"); Map(x => x.Description); Map(x => x.Amount); Table("`OrderLine`"); } } public class OrderLineDTO { // Standard properties public virtual int OrderLineId { get; set; } public virtual string Description { get; set; } public virtual decimal Amount { get; set; } public virtual OrderDTO Order { get; set; } // <-- this refs the order } 

Estos objetos DTO asignan objetos Order y OrderLines CSLA respectivamente

Cuando se asigna automáticamente a OrderLinesDTO se mapea una lista de OrderLinesDTO . Auto mapeador está mapeando la propiedad "Order" de las líneas, que vuelve a OrderLine , que luego OrderLine a OrderLine , luego a Order y así sucesivamente

¿Alguien sabe si Automapper puede evitar esta referencia circular?

En su configuración de Automapper:

 Mapper.Map() .ForMember(m => m.Order, opt => opt.Ignore()); Mapper.Map() .AfterMap((src, dest) => { foreach(var i in dest.OrderLines) i.Order = dest; }); 
    Intereting Posts