我是automapper的新手。我正在尝试将对象映射到DTO。该对象具有可空的locationId。 如果locationId为null,我需要将空字符串分配给DTO的“LocationName”属性,或者使用EF从SQL中的表中选择locationName。 我该如何做到这一点?
课程:
public class Foo
{
public int id { get; set; } //not relevant, here for convention
public int? LocationId { get; set; }
}
public class FooDto
{
public int id { get; set; } //not relevant, here for convention
public string LocationName { get; set; }
}
我的尝试:
Mapper.CreateMap<Foo, FooDto>()
.ForMember( dest => dest.locationName, options => options.ResolveUsing(src=> src.LocationId == null ? "" : src => db.Locations.SingleOrDefault(l => l.Id == src.LocationId).Name) )
我以this为例,但它不使用EF,所以我不知道我做错了什么。我从来没有在MapFrom vs ResolveUsing上得到一个明确的答案来自各种来源,如this。
答案 0 :(得分:0)
我担心的是我将一种属性类型映射到另一种属性并使用EF。事实是,automapper并不关心。此代码有效:
Mapper.CreateMap<Foo, FooDto>()
.ForMember( dest => dest.locationName, opt => opt.ResolveUsing(src=> src.LocationId == null ? "" : db.Locations.SingleOrDefault(l => l.Id == src.LocationId).Name) )
当问题出现在我的lambda表达式中时,我正在思考它。我两次通过辩论,因为我没有考虑过它。