Автоматическое сопоставление в проекте ASP.Net Core 2.1 - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть пользовательское поле в моей таблице UserIdentity под названием «Имя».Поле Имя будет содержать имя пользователя, который зарегистрировался.

public class User : IdentityUser
    {       
        public string Name { get; set; }
        public bool CanNotify { get; set; }

    }

У меня есть еще одна таблица с именем Post имеет поле "AuthorName"

public class Post
    { 
        public Instant Published { get; set; }
        public string Content { get; set; }
        public Guid UserId { get; set; }
        public string AuthorName { get; set; } 
}

При создании / публикацииблог, я хочу, чтобы AuthorName был тем, кто вошел в систему, что означает, что AuthorName должен быть связан с именем из таблицы UserManager, который в настоящее время вошел в систему.

public async Task<IActionResult> OnPostAsync()
{
    cmd = _mapper.Map(User, cmd);
}

public class Mapper : Profile
{
   public Mapper()
   {
       CreateMap<ClaimsPrincipal, CreatePostCommand>(MemberList.None)
                   .ForMember(d => d.UserId, m => m.MapFrom(s => 
                   Guid.Parse(s.FindFirstValue(ClaimTypes.NameIdentifier))))
                .ForMember(d => d.Name, m => m.MapFrom(s => s.Identity.AuthorName));

   }
}

Над кодом работает нормально, но я нене хочу отображать имя личности, скорее оно должно отображаться из таблицы UserManager, я пробовал много логик, но не работал, позвольте мне вставить одну из них: -

CreateMap<ClaimsPrincipal, CreatePostCommand>(MemberList.Source)
              .ForMember(d => d.UserId, m => m.MapFrom(s => Guid.Parse(s.FindFirstValue(ClaimTypes.NameIdentifier))))
              .ForMember(d => d.Name, m => m.MapFrom(s => s.FindFirst(_userManager.GetUserAsync(User).Result.AuthorName)));

Но приведенные выше правила отображения даютme error

«Пользователь» - это тип, который недопустим в данном контексте

1 Ответ

0 голосов
/ 04 декабря 2018

Как вы можете видеть по синему цвету «Пользователь», «Пользователь» интерпретируется компилятором как тип (или, возможно, метод, но ошибка компилятора указывает, что он интерпретируется как тип, которыйтоже логично, так как есть тип User).Это может быть просто, так как у вас есть класс User.

Вопрос в следующем: какой объект / переменную вы пытаетесь передать _userManager.GetUserAsync ()?переименуйте эту переменную из User во что-то другое (например, LocalUser или myUser или что-то еще), это должно решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...