2017-08-22 63 views
1

我试图创建一个小型的网络应用程序,允许将电影存储在数据库中。我有这个Movie类:需要帮助创建/使用类中的集合(C#,ASP.Net,MVC)

public class Movie 
{ 
    public string Title { get; set; } 
    public string Synopsis { get; set; } 
    public List<string> Actors { get; set; } 
    public DateTime StartDate { get; set; } 
    public string MoviePic { get; set; } // path to image 
    public int RunningTime { get; set; } // in minutes 
    public string Trailer { get; set; } // youtube url 
} 

在我的控制,我试图使用类来创建一个电影:

var jurassicPark = new Movie 
{ 
    Title = "Jurassic Park", 
    Synopsis = "Dinosaurs go crazy on an island.", 
    MoviePic = "jurassicLogo.jpg" 
}; 

所有这一切的伟大工程,但我也想添加一个Rating财产,它可以只有是表示该评级标志的图像的四个字符串之一。换句话说,我不想只有一个public string Rating属性可以是任何旧的字符串。我只想在四个特定的字符串之间进行选择。

例如,我最初把这个电影类:

public class Rating 
{ 
    public string GRating = "g.jpg"; 
    public string PgRating = "pg.jpg"; 
    public string Pg13Rating = "pg13.jpg"; 
    public string RRating = "r.jpg"; 
} 

这并没有工作,所以我做了一些谷歌搜索,并尝试这个:

public enum Rating 
{ 
    GRated = "G.jpg", 
    PgRated = "PG.jpg", 
    Pg13Rated = "PG13.jpg", 
    RRated = "R.jpg" 
} 

看到没工作,或者。我可以在我的控制器中调用Movie.Rating.GRated,但我实际上无法将评分分配给电影。我试着给电影类添加public Rating Rating { get; set; },看起来好像它可以让我在控制器中为我的jurassicPark对象添加一个评级,但它不喜欢我试过的任何东西(例如:Rating = Movie.Rating.Pg13Rated给了我一个红色的波浪形状)。

看起来这应该是超级简单的,但我对ASP.Net还是有点新,而且我在这方面遇到了很多麻烦。

+0

我确实尝试过,但我无法弄清楚如何分配评级(请参见下段) –

+0

我提到在底部段落 –

+0

enum是正确的选择,你知道它们永远不会改变 - 但枚举必须是整型(除了'char') - 通常是'int',但可以是'byte','long'等。该值不能是'string'。如果您要将'Rating.GRated'显示为“g.jpg”,则使用'[Display]'属性 –

回答

5

恕我直言,更好的解决方案是创建一个单独的查找表来存储可能的评级列表,并在电影表中有一个外键。在数据库级别上这确保您即使你的代码没有设置正确的值

您可以到这个查找表添加附加属性只存储这些值之一(参照完整性)。例如,对于每个等级标志图像,每个等级的描述等

public class Movie 
{ 
    public int Id {set;get;} 
    public string Title { get; set; } 
    public string Synopsis { get; set; } 
    public List<string> Actors { get; set; } 
    public DateTime StartDate { get; set; } 
    public string MoviePic { get; set; } // path to image 
    public int RunningTime { get; set; } // in minutes 
    public string Trailer { get; set; } // youtube url 

    public int RatingId {set;get;} 
    public Rating Rating { set;get;} 
} 
public class Rating 
{ 
    public int Id {set;get;} 
    public string Name {set;get;} ; 
    public string Description {set;get;} ; 
    public string LogoImageUrl {set;get;} ; 
} 

话说回来,你可以简单地使用一个枚举和存储字符串。但是查找表的上述方法允许您为每个评级项目保留附加属性。