gpt4 book ai didi

c# - 使用 AutoMapper 从实体映射到 DTO 或从 DTO 映射到实体时出错

转载 作者:太空狗 更新时间:2023-10-29 21:27:35 27 4
gpt4 key购买 nike

我使用 EntityFramework 作为 DataLayer 和 DTO 在层之间传输数据。我在 N 层架构中开发 Windows 窗体,当我尝试在 BLL 中从实体映射到 DTO 时:

public IEnumerable<CategoryDTO> GetCategoriesPaged(int skip, int take, string name)
{
var categories = unitOfWork.CategoryRepository.GetCategoriesPaged(skip, take, name);
var categoriesDTO = Mapper.Map<IEnumerable<Category>, List<CategoryDTO>>(categories);

return categoriesDTO;
}

我遇到了这个错误: http://s810.photobucket.com/user/sky3913/media/AutoMapperError.png.html

错误说我缺少类型映射配置或不支持的映射。我已经在 UI 层以这种方式使用配置文件注册了映射:

[STAThread]
static void Main()
{
AutoMapperBusinessConfiguration.Configure();
AutoMapperWindowsConfiguration.Configure();
...
Application.Run(new frmMain());
}

AutoMapper 配置在 BLL 中:

public class AutoMapperBusinessConfiguration
{
public static void Configure()
{
Mapper.Initialize(cfg =>
{
cfg.AddProfile<EntityToDTOProfile>();
cfg.AddProfile<DTOToEntityProfile>();
});
}
}

public class EntityToDTOProfile : Profile
{
public override string ProfileName
{
get { return "EntityToDTOMappings"; }
}

protected override void Configure()
{
Mapper.CreateMap<Category, CategoryDTO>();
}
}

public class DTOToEntityProfile : Profile
{
public override string ProfileName
{
get { return "DTOToEntityMappings"; }
}

protected override void Configure()
{
Mapper.CreateMap<CategoryDTO, Category>();
}
}

从 DTO 映射到实体时,我也遇到了同样的错误。

category = Mapper.Map<Category>(categoryDTO);

如何解决?

最佳答案

这是因为您正在使用 Mapper.Initialize多次。如果您查看它调用的源代码 Mapper.Reset()这意味着只有最后定义的映射才能工作。因此,只需删除 Initialize 调用并替换为 Mapper.AddProfile< >

关于c# - 使用 AutoMapper 从实体映射到 DTO 或从 DTO 映射到实体时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24850169/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com