.net core 使用另一个上下文中的第三个实体在两个实体之间创建映射的最佳方法

.net core 使用另一个上下文中的第三个实体在两个实体之间创建映射的最佳方法,.net-core,automapper,automapper-8,.net Core,Automapper,Automapper 8,您好,我想在两个实体source:User,target:UserInfosDto之间创建一个映射,而目标DTO UserItemPreference的一个成员需要来自另一个上下文中第三个实体的信息 public class UserInfosDto { //public int UserId { get; set; } public string FirstName { get; set; } public string LastName { get; set; }

您好,我想在两个实体source:User,target:UserInfosDto之间创建一个映射,而目标DTO UserItemPreference的一个成员需要来自另一个上下文中第三个实体的信息

public class UserInfosDto
{
    //public int UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }

    public UserItemPreferencesDto UserItemPreferences { get; set; }
}
public class UserItemPreferencesDto
{
    public bool SeeActuality { get; set; }
    public bool IsInEditorMode { get; set; }
}
public class User
{
    public string IdentityId { get; set; }
    //...
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}

public class UserIdentity
{
    public string IdentityId { get; set; }
    //...  
    public bool SeeActuality { get; set; }
    public bool IsInEditorMode { get; set; }  
}
用户和用户标识来自不同的数据库,但有一个共同的属性标识ID。我考虑使用ITypeConverter,在其中注入UserIdentity dbContext。问题是我找不到一种方法只能在一个成员上使用ITypeConverter。

请改用,它允许解析单独的成员而不是完整的类型

对于上面的案例,它看起来像

public class UserItemPreferencesResolver
    : IValueResolver<User, UserInfosDto, UserItemPreferencesDto>
{
    private readonly UserEntityDbContext _dbContext;

    public UserItemPreferencesResolver(UserEntityDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public UserItemPreferencesDto Resolve(
        User source,
        UserInfosDto destination,
        UserItemPreferencesDto destinationMember,
        ResolutionContext context
        )
    {
        UserItemPreferencesDto preferences = /* resolve from _dbContext (and transform) */
        return preferences;
    }
}
您可以通过以下方式创建映射:

CreateMap<User, UserInfosDto>()
    .ForMember(
        dest => dest.UserItemPreferences, 
        opt => opt.MapFrom<UserItemPreferencesResolver>()
    );