Cha*_*leh 14 c# csla circular-reference automapper-2
我正在使用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
}
Run Code Online (Sandbox Code Playgroud)
和:
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
}
Run Code Online (Sandbox Code Playgroud)
这些DTO 对象分别映射到CSLA对象Order和OrderLinesCSLA对象
自动映射到映射OrderLines列表时OrderLinesDTO.然后,自动映射器映射行的"Order"属性Order,然后映射回到然后循环映射回到OrderLine,然后到Order等等.
有谁知道Automapper是否可以避免此循环引用?
Ste*_*tty 23
在您的Automapper配置中:
Mapper.Map<OrderLine, OrderLineDTO>()
.ForMember(m => m.Order, opt => opt.Ignore());
Mapper.Map<Order, OrderDTO>()
.AfterMap((src, dest) => {
foreach(var i in dest.OrderLines)
i.Order = dest;
});
Run Code Online (Sandbox Code Playgroud)
我在使用 EF 6 和 AutoMapper 6 时遇到了同样的问题。显然 Kenny Lucero 发布的内容让我找到了解决方案。以下是 AM 网站的摘录:
// Circular references between users and groups
cfg.CreateMap<User, UserDto>().PreserveReferences();
Run Code Online (Sandbox Code Playgroud)
将 PreserveReferences() 添加到两个模型使其工作。