using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Data.Entity; using System.Diagnostics.Contracts; using System.Linq; using System.Text; using System.Threading.Tasks; using MovieDB.Migrations; namespace MovieDB { public class Movie { public int Id { get; set; } [Required] public string Name { get; set; } [Required] public int Year { get; set; } public List Zanrs { get; set; } public virtual List Actors { get; set; } public Movie() { this.Zanrs = new List(); this.Actors = new List(); } } public class ActorRole { public int Id { get; set; } [Required] public string Role { get; set; } [Required] public Actor Actor { get; set; } } public class Actor { public int Id { get; set; } [Required] public string FirstName { get; set; } [Required] public string LastName { get; set; } [Required] public bool Active { get; set; } [Required] public int BirthYear { get; set; } public virtual List Movies { get; set; } public Actor () { this.Active = true; this.Movies = new List(); } } public class MovieDBContext : DbContext { public DbSet Movies { get; set; } public DbSet ActorRoles { get; set; } public DbSet Actors { get; set; } public MovieDBContext() : base("name=MovieDBBase") { Database.SetInitializer( new MigrateDatabaseToLatestVersion()); } } class Program { static void Main(string[] args) { using (MovieDBContext db = new MovieDBContext()) { bool running = true; while (running) { Console.Write("> "); string[] input = Console.ReadLine().Split(' '); switch (input[0]) { case "exit": running = false; break; case "listmovies": foreach (var movie in db.Movies) { Console.WriteLine($"{movie.Id}: {movie.Name} ({movie.Year})"); } Console.WriteLine($"Movie count: {db.Movies.Count()}"); break; case "addmovie": var m = new Movie(); m.Name = input[1]; m.Year = int.Parse(input[2]); db.Movies.Add(m); db.SaveChanges(); break; case "addactor": var a = new Actor(); a.FirstName = input[1]; a.LastName = input[2]; a.BirthYear = int.Parse(input[3]); db.Actors.Add(a); db.SaveChanges(); break; case "listactors": foreach (var actor in db.Actors) { Console.WriteLine($"{actor.Id}: {actor.FirstName} {actor.LastName} ({actor.BirthYear}), movie count: {actor.Movies.Count()}"); } Console.WriteLine($"Actor count: {db.Actors.Count()}"); break; case "addactormovie": var ar = new ActorRole(); var am = db.Movies.Find(int.Parse(input[1])); am.Actors.Add(ar); ar.Actor = db.Actors.Find(int.Parse(input[2])); ar.Role = input[3]; break; case "listactormovie": var mov = db.Movies.Find(int.Parse(input[1])); foreach (var actor in mov.Actors) { Console.WriteLine($"{actor.Id}: {actor.Actor.FirstName} {actor.Actor.LastName} ({actor.Actor.BirthYear}) {actor.Role}"); } Console.WriteLine($"Number of actors for movie {mov.Name}: {mov.Actors.Count}"); break; case "help": Console.WriteLine("listmovies: Lists all movies\naddmovie : Adds a movie\nlistactors: List all actors\naddactor : Add a new actor\nlistactormovie : List actors for a movie\naddactormovie : Add a actor to a movie with a role"); break; default: Console.WriteLine("No such command. Try help."); break; } } } } } }