使用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对象分别映射到Order
和OrderLines
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; });