如何在ASP.NET中向用户添加数据

时间:2019-02-25 17:23:00

标签: c# asp.net

我有一个ASP.NET Core MVC应用程序。我正在使用ASP.NET Identity进行用户管理。每个用户都可以登录到该应用程序,并拥有自己的页面,可以在其中保存和修改自己喜欢的电影。

我的问题是如何由用户识别电影?

我的第一个猜测是将电影列表添加到用户类,但是我觉得这是错误的,因为用户类只应包含有关身份的数据。

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

我的第二个想法是将UserId添加到Movie类中,但是感觉就像是再次混合模型...这将使在控制器中检索数据有些难看...

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

我刚刚开始使用ASP.NET冒险,所以在这里我有些困惑。向用户添加用户数据(与身份无关)的官方正确方法是什么?

3 个答案:

答案 0 :(得分:6)

您可以创建一个单独的模型,其中将包含UserId和MovieId。例如:

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

然后,您可以基于已登录的用户显示此表中的所有电影。

答案 1 :(得分:2)

如果您只想获得有关用户身份的数据,而不想在电影上拥有用户ID,则可以创建一个名为UserMovies的关联表,其中包含一个用户ID和一个电影列表,如下所示:

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

答案 2 :(得分:1)

您可以创建另一个表来链接它们。

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);

其他示例:How to create a many-to-many mapping in Entity Framework?