【问题标题】:How to add data to user in ASP.NET如何在 ASP.NET 中向用户添加数据
【发布时间】:2019-02-25 17:22:59
【问题描述】:

我有一个 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 冒险,所以我在这里有点困惑。向用户添加用户数据(与身份无关)的官方正确方法是什么?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您可以创建一个单独的模型来保存 UserId 和 MovieId。例如:

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

    然后您可以根据登录用户显示此表中的所有电影。

    【讨论】:

      【解决方案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;
      }
      

      【讨论】:

        【解决方案3】:

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

        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?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多