我正在使用Automapper将我的NHibernate代理对象(DTO)映射到我的CSLA业务对象。
我正在使用Fluent NHibernate创建映射 - 这部分工作正常。
我的问题是,Order
有一组OrderLines
,每个OrderLine
都引用了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
和OrderLines
CSLA对象。
当自动映射到OrderLines
时,会映射一个OrderLinesDTO
列表。然后,自动映射将在行的"Order"
属性上映射,该属性映射回Order
,然后循环地映射回OrderLine
,再映射回Order
,如此循环。
是否有人知道Automapper是否可以避免这种循环引用?
[IgnoreMap]
? - Marc Gravell[IgnoreMap]
属性。我会生成一些类,所以如果它有效,我会尝试将其插入到生成器中。 - Charleh[IgnoreMap]
似乎总是忽略对属性的映射 - 我想要能够将其映射到OrderLines
上的Order
属性 - 但是这个Order
属性包含了对行的父级的引用,因此存在循环引用。 - Charleh