Automapper returns 使用 ProjectTo<> 的空对象
Automapper returns empty objects using ProjectTo<>
我是 Automapper 的新手,正在尝试将 Entity Framework 数据库对象映射到 DTO。
我的数据库对象 OfficeLookup
包含 Code
和 Description
(以及我不关心的其他属性)。
我的 OfficeDto
包含 Id
和 Name
属性。
映射:
private MapperConfiguration OfficeMapperConfiguration =>
new MapperConfiguration(
cfg =>
{
cfg.CreateMap<OfficeLookup, OfficeDto>()
.ForMember(dest => dest.Id, act => act.MapFrom(src => src.Code))
.ForMember(dest => dest.Name, act => act.MapFrom(src => src.Description));
});
还有我的代码:
public IEnumerable<OfficeDto> GetOfficeDtos() => OfficeLookup.ProjectTo<OfficeDto>(OfficeMapperConfiguration); // returns an Ienumerable of empty OfficeDTOs
奇怪的是,我有另一个更复杂的映射,用于不同的 table,效果很好。我不明白为什么这张地图没有。
我映射生成的表达式是
ObjectQuery<OfficeLookup>.MergeAs(MergeOption.AppendOnly).Select(dtoOfficeLookup => new OfficeDto())
这看起来不对。另一个映射生成一个正确设置各种属性的表达式(Office 值除外。我假设一旦我可以获得这个独立映射,我将能够修复嵌套映射)。
问题应该在相应的 OfficeDto
属性中,更具体地说,缺少 属性 setter,在这种情况下,AutoMapper 会简单地将它们从投影中跳过,即使它们已经被投影明确映射。
例如使用以下内容重现该问题 class:
class OfficeDto
{
public int Id { get; }
public string Name { get; }
}
并添加 属性 setters(甚至是私有的)修复它:
class OfficeDto
{
public int Id { get; private set; }
public string Name { get; set; }
}
我是 Automapper 的新手,正在尝试将 Entity Framework 数据库对象映射到 DTO。
我的数据库对象 OfficeLookup
包含 Code
和 Description
(以及我不关心的其他属性)。
我的 OfficeDto
包含 Id
和 Name
属性。
映射:
private MapperConfiguration OfficeMapperConfiguration =>
new MapperConfiguration(
cfg =>
{
cfg.CreateMap<OfficeLookup, OfficeDto>()
.ForMember(dest => dest.Id, act => act.MapFrom(src => src.Code))
.ForMember(dest => dest.Name, act => act.MapFrom(src => src.Description));
});
还有我的代码:
public IEnumerable<OfficeDto> GetOfficeDtos() => OfficeLookup.ProjectTo<OfficeDto>(OfficeMapperConfiguration); // returns an Ienumerable of empty OfficeDTOs
奇怪的是,我有另一个更复杂的映射,用于不同的 table,效果很好。我不明白为什么这张地图没有。
我映射生成的表达式是
ObjectQuery<OfficeLookup>.MergeAs(MergeOption.AppendOnly).Select(dtoOfficeLookup => new OfficeDto())
这看起来不对。另一个映射生成一个正确设置各种属性的表达式(Office 值除外。我假设一旦我可以获得这个独立映射,我将能够修复嵌套映射)。
问题应该在相应的 OfficeDto
属性中,更具体地说,缺少 属性 setter,在这种情况下,AutoMapper 会简单地将它们从投影中跳过,即使它们已经被投影明确映射。
例如使用以下内容重现该问题 class:
class OfficeDto
{
public int Id { get; }
public string Name { get; }
}
并添加 属性 setters(甚至是私有的)修复它:
class OfficeDto
{
public int Id { get; private set; }
public string Name { get; set; }
}