257 votes

ASP MVC5 - identité. Comment obtenir ApplicationUser actuel

J'ai entité Article dans mon projet qui a ApplicationUser propriété nommée Author. Comment puis-je obtenir de l'intégralité de l'objet de l'actuel connecté ApplicationUser. Tout en créant un nouvel article, je dois mettre en Author de la propriété en Article actuels ApplicationUser.

Dans les anciennes inscriptions mechanizm c'était simple, mais dans la nouvelle Identité mechanizm je ne sais pas comment faire.

J'ai essayé de le faire de cette façon:

  • Ajouter à l'aide de relevé d'Identité pour les extensions: - using Microsoft.AspNet.Identity;
  • Alors j'essaie d'obtenir de l'actuel de l'utilisateur: ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == User.Identity.GetUserId());

Mais j'ai exception :

LINQ to entities ne reconnaît pas la méthode " du Système.Chaîne GetUserId(Système D'.De sécurité.Principal.L'identité) de la méthode, et cette méthode ne peut pas être traduit dans un magasin d'expression. Source=EntityFramework

473voto

TrueBlueAussie Points 26794

Vous ne devriez pas besoin d'interroger la base de données directement de l'actuel ApplicationUser.

La façon correcte d'accès de l'utilisateur actuel de l'objet dans ASP.Net d'identité (à cette date) est:

var user = UserManager.FindById(User.Identity.GetUserId());

Si vous n'êtes pas dans le Compte standard contrôleur, vous aurez besoin d'ajouter ce qui suit (par exemple) de votre contrôleur:

1. Ajouter ces deux propriétés:

    /// <summary>
    /// Application DB context
    /// </summary>
    protected ApplicationDbContext ApplicationDbContext { get; set; }

    /// <summary>
    /// User manager - attached to application DB context
    /// </summary>
    protected UserManager<ApplicationUser> UserManager { get; set; }

2. Ajouter ceci dans le constructeur du Contrôleur:

    this.ApplicationDbContext = new ApplicationDbContext();
    this.UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(this.ApplicationDbContext));

65voto

Ellbar Points 425

Mon erreur, je ne devrais pas pour utiliser la méthode à l’intérieur de la requête LINQ ; p

Code correct :

33voto

rtpHarry Points 5306

Son dans les observations des réponses mais personne n’a posté ceci comme la solution réelle.

Vous avez juste besoin d’ajouter un à l’aide de déclaration au sommet :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X