Skip to content

Instantly share code, notes, and snippets.

@gavilanch
Created December 28, 2020 12:50
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gavilanch/68f3787ce8316aa9adad473899aa4b08 to your computer and use it in GitHub Desktop.
Save gavilanch/68f3787ce8316aa9adad473899aa4b08 to your computer and use it in GitHub Desktop.
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