Created
December 28, 2020 12:50
-
-
Save gavilanch/68f3787ce8316aa9adad473899aa4b08 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Microsoft.EntityFrameworkCore; | |
using System; | |
using System.Collections.Generic; | |
using System.ComponentModel.DataAnnotations; | |
using System.Linq; | |
namespace ConsoleApp4 | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
using (var context = new ApplicationDbContext()) | |
{ | |
// Creamos una DB en limpio | |
context.Database.EnsureDeleted(); | |
context.Database.EnsureCreated(); | |
// Creamos películas con sus géneros | |
var drama = new Genero() { Nombre = "Drama" }; | |
var accion = new Genero() { Nombre = "Acción" }; | |
var animacion = new Genero() { Nombre = "Animación" }; | |
var biografia = new Genero() { Nombre = "Biografía" }; | |
var avengers = new Pelicula() { Titulo = "Avengers", Generos = new() { accion } }; | |
var spiderman = new Pelicula() { Titulo = "Spiderman: Spiderverse", Generos = new() { accion, animacion } }; | |
var inception = new Pelicula() { Titulo = "Inception", Generos = new() { drama } }; | |
context.AddRange(drama, accion, animacion, biografia, avengers, spiderman, inception); | |
context.SaveChanges(); | |
} | |
using (var context = new ApplicationDbContext()) | |
{ | |
Console.Clear(); | |
//var peliculasConGeneros = context.Peliculas.Include(x => x.Generos).ToList(); | |
//ImprimirPeliculas(peliculasConGeneros); | |
//var peliculasDeAccion = context.Peliculas.Include(x => x.Generos) | |
// .Where(pelicula => pelicula.Generos.Select(genero => genero.Nombre).Contains("Acción")) | |
// .ToList(); | |
//ImprimirPeliculas(peliculasDeAccion); | |
//var peliculasYGenerosQueEmpiezanConA = context.Peliculas | |
// .Include(pelicula => pelicula.Generos.Where(genero => genero.Nombre.StartsWith("A"))) | |
// .ToList(); | |
//ImprimirPeliculas(peliculasYGenerosQueEmpiezanConA); | |
var peliculasConGenerosQueNoEmpiezanConA = context.Peliculas.Include(x => x.Generos) | |
.Where(pelicula => | |
pelicula.Generos.Where(genero => !genero.Nombre.StartsWith("A")).Count() > 0) | |
.ToList(); | |
ImprimirPeliculas(peliculasConGenerosQueNoEmpiezanConA); | |
} | |
} | |
private static void ImprimirPeliculas(List<Pelicula> peliculasDeAccion) | |
{ | |
Console.ForegroundColor = ConsoleColor.Green; | |
foreach (var pelicula in peliculasDeAccion) | |
{ | |
Console.WriteLine($"Título: {pelicula.Titulo}"); | |
if (pelicula.Generos != null) | |
{ | |
foreach (var genero in pelicula.Generos) | |
{ | |
Console.WriteLine($" - {genero.Nombre}"); | |
} | |
} | |
} | |
Console.ForegroundColor = ConsoleColor.White; | |
} | |
} | |
public class Genero | |
{ | |
public int Id { get; set; } | |
[StringLength(30)] | |
public string Nombre { get; set; } | |
public List<Pelicula> Peliculas { get; set; } | |
} | |
public class Pelicula | |
{ | |
public int Id { get; set; } | |
[StringLength(120)] | |
public string Titulo { get; set; } | |
public List<Genero> Generos { get; set; } | |
} | |
public class ApplicationDbContext : DbContext | |
{ | |
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) | |
{ | |
optionsBuilder.UseSqlServer("Server=.;Database=EFCore5_manytomany;Integrated Security=True") | |
.LogTo(Console.WriteLine, Microsoft.Extensions.Logging.LogLevel.Information); | |
base.OnConfiguring(optionsBuilder); | |
} | |
public DbSet<Genero> Generos { get; set; } | |
public DbSet<Pelicula> Peliculas { get; set; } | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment