我创建了一个简单的电影应用,它将显示一系列电影,并且会有一个可以编辑电影信息的管理面板。我已经为演员和电影表创建了我的模型,但我很难找出宣布电影类型属性的最佳方式。
基本上我的问题是双重的,因为我不确定Genre是否应该是自己的链接到电影表的表,或者是否应该将其声明为列表。简单来说,这个:
public class Movie
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int MovieId { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public Rating? Rating { get; set; }
public int Ranking { get; set; }
public virtual IList<Genre> Genres { get; set; }
public virtual IEnumerable<Actor> Actors { get; set; }
}
或者这个:
public class Movie
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int MovieId { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public IList<string> Genre { get; set; }
public Rating? Rating { get; set; }
public int Ranking { get; set; }
public virtual IEnumerable<Actor> Actors { get; set; }
}
...以及在创建影片对象时如何在种子方法中填充它。
var movies = new List<Movie>
{
new Movie {Title = "Pineapple Express", ReleaseDate = DateTime.Parse("2008-08-06"), Rating = Rating.R},
new Movie {Title = "American Hustle", ReleaseDate = DateTime.Parse("2013-12-13"), Rating = Rating.R},
new Movie {Title = "40 Year Old Virgin", ReleaseDate = DateTime.Parse("2005-08-09"), Rating = Rating.R},
new Movie {Title = "Ant Man", ReleaseDate = DateTime.Parse("2015-07-09"), Rating = Rating.PG13},
new Movie {Title = "This Is The End", ReleaseDate = DateTime.Parse("2013-06-12"), Rating = Rating.R},
new Movie {Title = "Anchorman: The Legend of Ron Burgundy", ReleaseDate = DateTime.Parse("2004-07-09"), Rating = Rating.R}
};
movies.ForEach(m => context.Movies.Add(m));
context.SaveChanges();
我尝试上网,但我很难找到包含适合我的例子的列表的模型示例(或者我可能不确定如何查找它?)。非常感谢任何帮助或指导。
谢谢!
答案 0 :(得分:1)
您可以将类型声明为枚举。这将使您无法为类型创建新表。您可以在单独的Genres.cs文件中将枚举声明为以下内容:
namespace Movies.Models
{
public enum Genres
{
Horror = 0,
Action = 1,
Comedy = 2,
Thriller = 3,
//Add whatever genres here
}
}
现在您将使用种子中的枚举,而不是在模型属性中保留字符串列表属性,因此这将是您的模型:
public class Movie
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int MovieId { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public IList<string> Genre { get; set; }
public Rating? Rating { get; set; }
public int Ranking { get; set; }
public virtual IEnumerable<Actor> Actors { get; set; }
}
播种方法如下所示:
var movies = new List<Movie>
{
new Movie {Title = "Pineapple Express", ReleaseDate = DateTime.Parse("2008-08-06"), Rating = Rating.R,Genre.Add(Genres.Action.ToString())}//You can use AddRange to add more than one genre
};
movies.ForEach(m => context.Movies.Add(m));
context.SaveChanges();
你必须尽可能地使你的枚举成为一般,添加所有类型并选择你需要的电影。
如果你打算让这个更流畅和更通用,你将不得不为一对多的关系制作一个表格
答案 1 :(得分:0)
我认为您在评论中已回答了自己的问题。如果您要允许用户编辑/添加该类型的条目,则应该是一个表格。
如果您为每部电影配备多种类型,您可能还需要另一个交叉引用表来保存MovieId和GenreId。然后,您可以查找与电影相关的所有类型。