我正在尝试创建一个允许将电影存储在数据库中的小型网络应用程序。我有这个 Movie 类:
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
}
在我的 Controller 中,我正在尝试使用该类创建电影:
var jurassicPark = new Movie
{
Title = "Jurassic Park",
Synopsis = "Dinosaurs go crazy on an island.",
MoviePic = "jurassicLogo.jpg"
};
所有这一切都很好,但我还想添加一个 Rating 属性,它只能是代表该评级标志图像的四个字符串之一。换句话说,我不想只拥有一个可以是任何旧字符串的 public string Rating 属性。我只想在四个特定字符串之间进行选择。
例如,我最初将其放在 Movie 类中:
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"
}
那也没用。我可以在我的 Controller 中调用 Movie.Rating.GRated,但实际上我无法为电影指定评级。我尝试添加 public Rating Rating { get;放; } 到 Movie Class,这似乎允许我在 Controller 中为我的 jurassicPark 对象添加评级,但它不喜欢我尝试过的任何东西(例如:Rating = Movie.Rating.Pg13Rated 给了我一个红色波浪线)。
看起来这应该非常简单,但我对 ASP.Net 还是有点陌生,我在这方面遇到了很多麻烦。
请您参考如下方法:
恕我直言,更好的解决方案是创建一个单独的查找表来存储可能的评级列表,并在您的电影表中有一个外键。在数据库级别,即使您的代码未能设置正确的值,这也确保您只存储其中一个值(参照完整性)
您可以向此查找表添加其他属性。例如,每个评级的 Logo 图像、每个评级的描述等。
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;} ;
}
话虽如此,您可以简单地使用枚举并存储字符串。但是上述查找表的方法允许您保留每个评级项目的附加属性。
