我是ASP.NET身份的新手,并致力于创建自己的Userstore,但无法让Tuser玩。我首先在后端有EntityFrameWork6数据库,并且从那里获得数据。我的问题是将我从EF6转换为Tuser的对象。我会带你完成我的一切。
1)accountController在signinmanager中调用passwordsignInasync
_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;
}
我尝试了互联网搜索中的铸造,转换和其他内容。我正在获得隐式转换类型,如果我施放或转换,我只会获得此错误的运行时版本。错误消息
您的方法FindByUserName
在隐式分配给TUser
时返回WebPortalUser
实例类型。如果两种类型都有父母的关系,则需要将其施放给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
希望它给出一些想法。
谢谢,@ehsan确实有帮助,并且是我问题的一部分。我知道这与c#基本原理有关,而不是ASP.NET身份或实体框架。我最终使用了您的第二个示例,创建了Tuser的新实例,但是我需要修复Usertable和Userstore的声明,以便让我。我的用途前看起来像
public class UserTable<TUser> where TUser : IdentityMember
我将其更改为
public class UserTable<TUser> where TUser : IdentityMember, new()