自动映射:如何使用EF在非空时映射对象

时间:2015-07-12 02:52:25

标签: c# entity-framework automapper

我是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

1 个答案:

答案 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表达式中时,我正在思考它。我两次通过辩论,因为我没有考虑过它。