【发布时间】:2015-02-28 00:49:27
【问题描述】:
我有以下模型(和相应的 DTO):
public class Link
{
public int Id {get; set;}
public int FirstLinkId {get; set;}
public int SecondLinkId {get; set;}
public virtual Link FirstLink {get; set;}
public virtual Link SecondLInk {get; set;}
}
public class OtherObject
{
public int Id {get; set;}
public int LinkId {get; set;}
public string Name {get; set;}
public virtual Link Link {get; set;}
}
在我的场景中,我可以有一个Link 对象,其中FirstLink 和/或SecondLink 可以为空、对其他对象的引用或对同一对象的引用。
现在我想使用 EF 从数据库中加载一个OtherObject 实体。我加载实体本身以及与之关联的Link 对象。 EF 完美地做到了这一点。
在这种特殊情况下,FirstLink 和 SecondLink 都与 Link 相同,因此,当从模型自动映射到 dto 时,它只会继续映射到遗忘。
我的映射是:
Mapper.CreateMap<OtherObject, OtherObjectDto>().Bidirectional()
.ForMember(model => model.LinkId, option => option.Ignore());
其中 Bidirectional() 是这个扩展:
public static IMappingExpression<TDestination, TSource> Bidirectional<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression)
{
return Mapper.CreateMap<TDestination, TSource>();
}
在这种情况下,有没有办法告诉 Automapper 不要再往下映射树?
【问题讨论】:
-
尝试打开查看器的视图状态
-
一件小事 - 做 ReverseMap 而不是 Bidirectional,它已经内置了。
标签: c# automapper