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