从 Asp.net mvc 5 Identity "Connot Implicitly convert type" 中的 DbObject 在 UserStore 中转换或创建 TUser
Convert or Create TUser in UserStore From a DbObject in Asp.net mvc 5 Identity "Connot Implicitly convert type"
我是 Asp.Net Identity 的新手,正在努力创建我自己的 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 和 return 我想要的对象,但是让对象转换为 TUser 是我的问题。
public TUser Login(string userName)
{
TUser y = _unitOfWork.WebPortalUsers.FindByUserName(userName);
return y;
}
我试过通过互联网搜索进行转换、转换和其他内容。我正在获取 Connot Implicitly convert 类型,如果我强制转换或转换,我只会得到此错误的运行时版本。
Snip of error message
您的方法 FindByUserName
returns 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
希望它能提供一些想法。
谢谢,@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()
我是 Asp.Net Identity 的新手,正在努力创建我自己的 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 和 return 我想要的对象,但是让对象转换为 TUser 是我的问题。
public TUser Login(string userName)
{
TUser y = _unitOfWork.WebPortalUsers.FindByUserName(userName);
return y;
}
我试过通过互联网搜索进行转换、转换和其他内容。我正在获取 Connot Implicitly convert 类型,如果我强制转换或转换,我只会得到此错误的运行时版本。 Snip of error message
您的方法 FindByUserName
returns 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
希望它能提供一些想法。
谢谢,@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()