c# – 自定义身份用户和扩展配置文件MVC

我试图将身份用户数据扩展到单独的表中,但是它不是填充的.

  public class MyUserInfo
  {
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

  }

  public class AppUser : IdentityUser<Int32, AppUserLogin, AppUserRole, AppUserClaim>
  {

    public MyUserInfo MyUserInfo { get; set; }
 }

//Fetching the user data

var userStore = new UserStore<AppUser, AppRole, int, AppUserLogin, AppUserRole, AppUserClaim>(db);
var userManager = new UserManager<AppUser, int>(userStore);

var user = userManager.FindById(1);

user.MyUserInfo显示null.但是在db中,我们有各自的用户数据.

我看到很多帖子,没有自定义似乎工作,但对于我,我修改id存储为整数,并更改了表名称.

最佳答案
股票Identity UserManager不会自动拉取UserInfo(或任何其他表实体与外键导航)

您已扩展身份模式,但您尚未扩展UserManager.

UserManager用于获取用户(例如findbyid(),FindByIdAsync())的方法不会通过实体框架导航检索“子”实体.

看看GitHub FindByIdAsync

    public virtual Task<TUser> FindByIdAsync(string userId, CancellationToken cancellationToken = default(CancellationToken))
    {
        cancellationToken.ThrowIfCancellationRequested();
        ThrowIfDisposed();
        var id = ConvertIdFromString(userId);
        return Users.FirstOrDefaultAsync(u => u.Id.Equals(id), cancellationToken);
    }

该方法仅返回用户实体.没有功能来检查“小孩”导航表,更不用说拉扯它们了.

您可以通过实现这种方法来扩展UserManager.

否则,您将必须在检索到UserId后手动拉入子实体.这是我怎么做到的

            var UserId = User.Identity.GetUserId<int>();

            try
            {
                user = await UserManager.FindByIdAsync(UserId );
            }
            catch (Exception e)
            {
                return BadRequest(e.Message);
            }

            var userInfo = AuthContext.UserInfo.
                   FirstOrDefault(u => u.Id == user.UserInfo_Id);

注意:我还必须确保我的ApplicationUser对我的UserInfo实体有一个外键:

public class ApplicationUser : IdentityUser
{
    [ForeignKey("UserInfo")]
    public int UserInfo_Id { get; set; }

    public virtual UserInfo UserInfo { get; set; }

并在我的模型构建器

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<ApplicationUser>()
          .HasRequired<UserInfo>(profile => profile.UserInfo);


        base.OnModelCreating(modelBuilder);
    }

转载注明原文:c# – 自定义身份用户和扩展配置文件MVC - 代码日志