【发布时间】:2020-05-25 05:20:39
【问题描述】:
我的对象结构如下
public class Source
{
public Connection Connection { get; set;}
}
public class Connection
{
public string Id { get; set;
public IEnumerable<Distributor> Distributors { get; set;
}
public class Distributor { get; set; }
{
public DistributorType Type {get; set;}
public string X { get; set; }
public string Y { get; set; }
}
public class Destination
{
public Distribution Distribution { get; set;
}
public class Distribution
{
public string Id { get; set;}
public string X { get; set; }
public string Y { get; set; }
}
我想将 Source 映射到 Destination 以用于属性 Distribution。映射如下
Source.Connection.Distributors.FirstOrDefault().X => Destination.Distribution.X
Source.Connection.Distributors.FirstOrDefault().Y => Destination.Distribution.Y
Source.Connection.Id => Destination.Distribution.Id
我尝试过使用自定义解析器,但没有成功
public class CustomDistributorResolver : IValueResolver<Source, Destination, Distribution >
{
public Distribution Resolve(Source source, Destination destination, Distribution destMember, ResolutionContext context)
{
var result = source.Connection.Distributors.FirstOrDefault(x => x.DistributorType =="ABC");
if (result == null) return null;
return new Distribution
{
Id = source.Connection?.Id,
X = result.X,
Y = result.Y
};
}
}
映射文件
CreateMap<Source, Destination>()
.ForMember(d => d.Distribution, opt => opt.MapFrom( new CustomDistributorResolver()));
我总是将 Distribution 值设为 NULL。
我不确定我在地图上做错了什么。
-艾伦-
【问题讨论】:
-
我现在不在我的 Windows PC 附近,但我有类似的东西,我认为这归因于 EF 核心中的延迟加载设置。这可能值得检查。
-
ForMember(d => d.Distribution, o => o.MapFrom(s => s.Connection.Distributors.FirstOrDefault(x => x.DistributorType =="ABC"))
标签: c# .net automapper