0

我希望始终使用默认映射,然后我希望能够在需要时覆盖它。

这是修改后的示例代码

 public SchoolController(IMapper mapper, SchoolContext context)
    {
        _mapper = mapper;
        _context = context;

        // the defaut mapping used always
        TypeAdapterConfig<Course, CourseDto>.ForType()
            .Map(dest => dest.CourseIDDto, src => src.CourseID)
            .Map(dest => dest.CreditsDto, src => src.Credits)
            .Map(dest => dest.TitleDto, src => src.Title + " DEFAULT")
            .Ignore(d => d.IgnoreTest)
            .Map(dest => dest.EnrollmentsDto, src => src.Enrollments);

    }
    
    // OData Sample
    [HttpGet("course")]
    [EnableQuery]
    public IQueryable<CourseDto> GetCourses()
    {
        var query = _context.Courses.AsNoTracking();

        TypeAdapterConfig cloneConfig = TypeAdapterConfig.GlobalSettings.Clone() ; 

        TypeAdapterConfig clonedConfig = cloneConfig
            .ForType<Course, CourseDto>()
             .Map(dest => dest.AnotherTestDto, src => (src.Title + " NEW-CLONE"))
             .Map(dest => dest.TitleDto, src => (src.Title + " over-CLONE"))
             .Map(dest => dest.IgnoreTest, src => (src.Title + " over-IGNORE-CLONE"))
          .Config
             ;

        
        return query
   .ProjectToType<CourseDto>(clonedConfig)
   .AsQueryable();
      
    }

这是结果

{
"courseIDDto":1045,
"titleDto":"Calculus DEFAULT", // EXPECTED "Calculus over-CLONE"
"anotherTestDto":"Calculus NEW-CLONE",
"creditsDto":4,
"ignoreTest":null, // EXPECTED "Calculus over-CLONE"
"enrollmentsDto":[{"enrollmentID":5},{"enrollmentID":11}]
}

基本上,它会添加新的映射,但不会覆盖现有的映射。

4

0 回答 0