3
votes

Comment ajouter des données à l'utilisateur dans ASP.NET

J'ai une application ASP.NET Core MVC. J'utilise ASP.NET Identity pour la gestion des utilisateurs. Chaque utilisateur peut se connecter à l'application et avoir sa propre page où il peut conserver et modifier, disons, ses films préférés.

Mon problème est de savoir comment identifier les films par les utilisateurs?

Ma première hypothèse était pour ajouter une liste de films à la classe d'utilisateurs, mais j'ai l'impression que c'est faux car la classe User ne doit contenir que des données concernant l'identité.

class Movie
{
    public string Title { get; set; }
    public string Author { get; set; }
    public string UserId { get; set; }
}

Ma seconde pensée a été d'ajouter UserId à la classe Movie mais cela ressemble à nouveau à mélanger des modèles ... Et cela rendrait la récupération des données dans les contrôleurs quelque peu moche ...

class User : IdentityUser
{
    public List<Movie> MovieList { get;set; }
}

Je ne fais que commencer mon aventure avec ASP.NET donc je suis un peu confus ici. Quelle est la manière officielle correcte d'ajouter des données utilisateur (non relatives à l'identité) à l'utilisateur?


0 commentaires

3 Réponses :


2
votes

Si vous souhaitez avoir uniquement des données concernant l'identité des utilisateurs et ne pas avoir d'ID utilisateur sur les films, vous pouvez créer une table associative appelée UserMovies contenant un ID utilisateur et une liste de films, comme ceci :

class UserMovies 
{
    public int Id;
    public string UserID; // or whatever datatype you're using to store user IDs.
    public List<Movie> Movies;
}


0 commentaires

6
votes

Vous pouvez créer un modèle séparé qui contiendra UserId et MovieId. Par exemple:

class UserFavouriteMovies
{
  public int Id { get; set; }
  public int MovieId {get; set; }
  public int UserId { get; set; }
}

Ensuite, vous pouvez afficher tous les films de ces tableaux en fonction d'un utilisateur connecté.


0 commentaires

1
votes

Vous pouvez créer une autre table pour les lier.

class User : IdentityUser
{
    public virtual ICollection<UserMovie> UserMovieList { get; set; }
}

class UserMovie 
{
    public int Id { get; set; }
    public int UserId { get; set; }
    public int MovieId { get; set; }

    [ForeignKey("UserId")]
    public virtual User User { get; set; }

    [ForeignKey("MovieId")]
    public virtual Movie Movie { get; set; }
}

class Movie
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Author { get; set; }
    public string UserId { get; set; }
}

var user = db.User.Include("UserMovieList").ToList();
for (int i = 0; i < user.UserMovieList.Count; i++)
{
    var movie = user.UserMovieList[i].Movie;
    // ...
}

// To get all movies of specific user
var specificUser = db.User.Find("user id").ToList().SelectMany(a => a.Movie);

Autre exemple: Comment créer un mappage plusieurs-à-plusieurs dans Entity Framework?


0 commentaires