gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:52:54 31 4
gpt4 key购买 nike

我正在使用 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 对象分别映射到 OrderOrderLines CSLA 对象

当自动映射到 OrderLines 时,会映射一个 OrderLinesDTO 列表。自动映射器然后将 "Order" 属性映射到行上,该属性映射回 Order,然后循环映射回 OrderLine,然后Order 等等

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

最佳答案

在您的 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;
});

关于c# - 使用 Automapper 导致堆栈溢出的循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11505128/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com