Преобразование или создание TUser в UserStore из DbObject в Asp.net mvc 5 Идентичность «Неявное неявное преобразование типа» - PullRequest
0 голосов
/ 19 марта 2019

Я новичок в Asp.Net Identity и работаю над созданием собственного UserStore, но не могу заставить TUser играть.У меня есть база данных EntityFramework6 сначала в бэкэнде, и я получаю данные оттуда без проблем.Моя проблема заключается в преобразовании объекта, который я получаю из EF6 в TUser.Я проведу тебя через то, что у меня есть.

1) AccountController вызывает PasswordSignInAsync в signInManager

_signInManager.PasswordSignInAsync(LoginAuditLog);

2) Вызовите FindByNameAsync в моем диспетчере пользователей

await this.UserManager.FindByNameAsync(LoginAuditLog.UserName); 

3), затем в моем UserStore у меня есть

  public Task<TUser> FindByNameAsync(string userName)
    {
        return Task.FromResult(_userTable.Login(userName));
    }

4) Когда он достигает _userTable.Login (), он вызывает Db и возвращает желаемый объект, но моя задача - преобразовать объект в TUser.

    public TUser Login(string userName)
    {
        TUser y = _unitOfWork.WebPortalUsers.FindByUserName(userName);

        return y;
    }

Я пробовал кастовать, конвертировать и другие вещи из поисковых запросов в Интернете.Я получаю Connot Implicitly тип преобразования, и если я приведу или преобразую, я просто получаю версию этой ошибки во время выполнения. Сообщение об ошибке

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Спасибо, @Ehsan, который помогает, и был частью моей проблемы. Я знал, что это больше связано с основами C #, чем ASP.Net Identity или Entity Framework. Я закончил с вашим вторым примером, создав новый экземпляр TUser, но мне нужно было исправить объявление UserTable и UserStore, чтобы позволить мне. Моя UserTable раньше выглядела как

public class UserTable<TUser> where TUser : IdentityMember

и я изменяю его на

public class UserTable<TUser> where TUser : IdentityMember, new()

0 голосов
/ 19 марта 2019

Ваш метод FindByUserName возвращает WebPortalUser тип экземпляра, пока вы неявно присваиваете ему TUser.Вам нужно либо привести его к TUser, если оба типа имеют родительские дочерние отношения, такие как:

 TUser y = _unitOfWork.WebPortalUsers.FindByUserName(userName) as TUser;

 return y;

или если это не так, вам нужно будет создать экземпляр и установить необходимые свойства явно илииспользуйте маппер, такой как AutoMapper, но для этого тип свойств в обоих классах должен быть одинаковым:

var user = _unitOfWork.WebPortalUsers.FindByUserName(userName);

TUser y = new TUser();
y.Username = user.Username;
.....
.....
// other properties

Надеюсь, это дает некоторое представление.

...