Почему я не вижу все столбцы таблицы AspNetUsers, когда пытаюсь выполнить запрос с помощью IdentityDbContext? - PullRequest
0 голосов
/ 21 мая 2019

Я работаю над приложением ASP.NET MVC5 с EntityFramework 6.2.

У меня есть таблица статей и таблица пользователей.У каждой статьи есть автор, которого я хочу получить из таблицы AspNetUsers. Я добавил новые столбцы в эту таблицу, изменив RegisterViewModel и добавив UserName, FullName, Description свойства к егомодель домена.

Проблема: я не вижу добавленные мной новые свойства, но вижу таблицы UserId и UserName из таблицы AspNetUsers с помощью этих строк.

User.Identity.GetUserId();

или

User.Identity.GetUserName();

затем я попытался использовать IdentityDbContext , и таким образом я могу получить данные из всех столбцов таблицы AspNetUsers, кроме (UserName, FullName, Description), как показано на этом снимке экрана:

query

и это моя таблица:

table

Я пытаюсь получить FullName для назначения в ArticleАвтор выглядит так:

var AspNetUser = new IdentityDbContext();
var UserInfo = AspNetUser.Users.Where(u => u.Id == article.UserId);
article.AuthorName = UserInfo.FullName;

Модель домена RegisterViewModel:

public class RegisterViewModel
{
    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }

    [Required]
    [Display(Name="Full Name")]
    public string FullName { get; set; }

    [Required]
    public string Description { get; set; }

    [Required]
    [Display(Name = "User Name")]
    public string UserName { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

Статья Модель домена:

public class Article
{
    public int Id { get; set; }
    [Required]
    public string Title { get; set; }
    [Required]
    public string Body { get; set; }
    public string UserId { get; set; }
    public string AuthorName { get; set; }
    public ApplicationUser User { get; set; }
}

Тоже интересно?что это значит, если я не вижу свойства, которые я сделал в этой ссылке, как показано на снимке экрана:

IdentityUser Properties

1 Ответ

0 голосов
/ 21 мая 2019

Я обнаружил, что с помощью IdentityDbContext я не могу запросить все столбцы таблицы AspNetUsers . Используя IdentityDbContext , вы сможете получать данные из исходных столбцов таблицы, а не из тех, которые вы добавили.

Допустим, вы хотите получить номер телефона из таблицы AspNetUsers. Вы можете получить его, используя IdentityDbContext , поскольку этот столбец изначально поставляется с таблицей AspNetUsers.

  ApplicationDbContext Context = new ApplicationDbContext();

  var CurrentUser = User.Identity.GetUserId();

  string PhoneNumber = Context.Users
 .Single(u => u.Id == CurrentUser)
 .PhoneNumber;

Но как запросить таблицу AspNetUsers и получить информацию из добавленных вами столбцов? вот пример для получения FullName и Описание текущего зарегистрированного на пользователя.

Сначала добавьте это пространство имен:

using Microsoft.AspNet.Identity.Owin;

тогда

string FullName = HttpContext.GetOwinContext()
                .GetUserManager<ApplicationUserManager>()
                .FindById(User.Identity.GetUserId()).FullName;

string ProfileDescription = HttpContext.GetOwinContext()
                .GetUserManager<ApplicationUserManager>()
                .FindById(User.Identity.GetUserId()).Description;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...