使用Automapper导致堆栈溢出的循环引用

我正在使用Automapper将我的NHibernate代理对象(DTO)映射到我的CSLA业务对象

我正在使用Fluent NHibernate来创建映射 – 这工作正常

我遇到的问题是Order有一个OrderLines集合,每个OrderLines都有一个对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 } 

和:

 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 } 

这些DTO对象分别映射到OrderOrderLines CSLA对象

自动映射到OrderLines时,会映射OrderLines列表。 然后,自动映射器映射行的"Order"属性,映射回Order ,然后循环映射回OrderLine ,然后映射到Order等等。

有谁知道Automapper是否可以避免此循环引用?

在您的Automapper配置中:

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