自动映射器集合

Automapper Collection

我正在做一个项目,我需要映射集合。我遇到了 Automapper.Collection 并尝试使用 class 但它都不起作用。我需要帮助。这是我的代码。

在我的创业公司class

services.AddAutoMapper(cfg => { cfg.AddCollectionMappers(); },typeof(Startup));

我还创建了一个 class 继承自 Automapper 配置文件 class here

public class UserMappingProfile : Profile
    {
        public UserMappingProfile()
        {
            CreateMap<PhotoToUpdateDto, Photo>().EqualityComparison((src, dest) => src.PublicId.ToLower() == dest.PublicId.ToLower());
            CreateMap<SocialHandles, SocialHandleDto>().ReverseMap().EqualityComparison((src, dest) => src.Name.ToLower() == dest.Name.ToLower());
        }
    }

每当我使用映射器时,它都会在数据库中创建新记录,而不是更新已经存在的记录。我需要帮助。

我认为这是因为您实体中的导航 属性

如果你有导航 属性 在你的 Createmap 中忽略它们

例如

CreateMap<PhotoToUpdateDto, Photo>().EqualityComparison((src, dest) => 
src.PublicId.ToLower() == dest.PublicId.ToLower())
.ForMember(p => p.Photographer , opt => opt.Ignore());
        

我会这样假设:

  • 映射器没有问题(因为它仍然成功地映射了您的对象)。
  • 当您获得与数据库交互的新对象时,会创建一条新记录,因为您要确保 ID 映射是正确的。
  • 您正在使用 EF Core 或某种 ORM 与数据库交互

如果我错了,请忽略这个答案。

好的,如果我的假设是正确的,那是因为 automapper 始终 return 作为映射过程的结果的新对象,您的 DbContext 绝对不会跟踪它。然后,每当您与之交互以在数据库中进行一些更改时,很可能会发生添加操作。

我认为您需要添加更多关于您实际遇到问题的代码块的信息...在这种情况下...为什么数据库条目保持创建,但不更新。