Циклическая ссылка, вызывающая переполнение стека с помощью Automapper

Я использую Automapper для сопоставления моих прокси-объектов NHibernate (DTO )с моими бизнес-объектами CSLA

. Я использую Fluent NHibernate для создания сопоставлений -, все работает нормально

У меня проблема в том, что в Orderесть коллекция OrderLinesи каждая из них имеет ссылку на Order.

public class OrderMapping : ClassMap<OrderDTO>
{
    public OrderMapping()
    {
        // Standard properties
        Id(x => x.OrderId);
        Map(x => x.OrderDate);
        Map(x => x.Address);

        HasMany<OrderLineDTO>(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<OrderLineDTO> OrderLines { get; set; } <-- this refs the lines
}

и:

public class OrderLineMapping : ClassMap<OrderLineDTO>
{
    public OrderLineMapping()
    {
        // Standard properties
        Id(x => x.OrderLineId);
        References<OrderDTO>(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
}

Эти объекты DTO сопоставляются с объектами Orderи OrderLinesCSLA соответственно

. При автоматическом сопоставлении -с OrderLinesсопоставляется список из OrderLinesDTO. Затем Auto Mapper отображает свойство "Order"на линиях, которое сопоставляется обратно с Order, которое затем циклически сопоставляется с OrderLine, затем с Orderи так далее

. Кто-нибудь знает, может ли Automapper избежать этой циклической ссылки?

14
задан Charleh 16 July 2012 в 02:23
поделиться