using Microsoft.AspNetCore.Mvc; using MVC01.Models; namespace MVC01.Controllers { public class CursoController : Controller { private readonly Contexto _context; public CursoController(Contexto context) { _context = context; } public IActionResult Index() { // Recuperar los datos de todos los cursos // Los vais a pasar a la vista // En la vista mostráis la información (id,nombre,descripcion) return View(); } public IActionResult AddCurso() { // Llamar a una vista con un formulario // Para poner nombre y descripción return View(); } public IActionResult NewCurso(Curso curso) { // Capturamos los datos del formulario // Y lo añadimos a la base de datos return View(); } } }
MVC + Consultas
Vamos a crear un controlador ConsultasController sobre la escuela. Tendrá las siguientes acciones:
Cursos
Nos mostrará la lista de cursos que tengan alumnos matriculados
Alumnos
Nos mostrará la lista de alumnos que estén matriculados en más de un curso
Direcciones
Nos mostrará la lista de alumnos que tengan más de una dirección
TotalPorCiudad
Nos mostrará el número de direcciones que tiene cada ciudad. Aquí tenemos una cadena y un número ¿Cómo lo haremos?
AlumnosCiudad
Nos mostrará los alumnos que sean de la ciudad que tiene más direcciones.
Como conectar
En program.cs
// Add services to the container. builder.Services.AddControllersWithViews(); // Añadimos la conexión al contexto builder.Services.AddDbContext<Contexto>(options => options.UseSqlServer("Data Source=.\\SQLEXPRESS;Initial Catalog=clase;Integrated Security=True;TrustServerCertificate=True")); var app = builder.Build();
En contexto.cs:
public DbSet<Alumno> Alumnos { get; set; } public Contexto(DbContextOptions<Contexto> options) : base(options) { }
Pistas Poker
Poker
Pareja
trio
color
full
poker
escalera
ecalera de color
1.- Cuantas cartas repetidas tengo
(lo del diccionario del mus)
Si hay cinco unos (5 elementos)
SI hay un 2 y tres unos: pareja (4 elementos)
Si tengo dos 2 y un 1: Doble pareja (3 elementos)
SI tengo un 3 y dos 1: trío (3 elementos)
Si tengo un 4 y un 1: poker (2 elementos)
<2,3><7,2>
<5,3><1,2>
Crearía una función a la que le paso una mano y me devuelve el diccionario
2.- Color: son todas del mismo palo o no
Aprovechar el algoritmo del diccionario para que me agrupe por palo y no por valor
CUando el diccionario solo tenga un elemento tengo color
otro: cojo el palo de la primera carta y hago un bucle. Si alguna carta tiene un palo diferente devuelvo false
Crearía un función a la que le paso una mano y me devuelve true o false
3.- Escalera
Las cartas son consecutivas
Ordenar la mano (de menor a mayor)
Si cada carta es igual a la anterior +1 hay escalera, si no, no
Crearía una función a la que le paso una mano y me dice true o false si hay escalera o no
Cada cosa la probamos, y la probamos con datos creados por nosotros
Ejercicios sobre escuela
Insertad 10 alumnos llamados alumno1, alumno2…alumno10, con direcciones iguales (calle1 ciudad1,…) matriculados en cursos iguales (curso1,…)
Mostrad los cursos de los alumnos que tengan un ‘1’ en el nombre.
Matriculad a todos los alumnos en el curso de id ‘1’
Mostrad el total de alumnos matriculados por cada curso (nombre del curso y total alumnos).
Ordenadlo de mayor a menor.
Eliminad todas las matrículas del curso9.
Ejercicio EFCore
Cread las entidades en c# necesarias para implementar la siguiente base de datos:
Se desea crear una base de datos que contenga información sobre las revistas a las que estás suscrito o compras habitualmente. De cada revista, se pide su título, el ISSN (un código que identifica a la publicación), el número y el año de publicación. También se desea almacenar información de cada uno de los artículos publicados: el título, la página de inicio y la página de fin. Se asume que no hay dos artículos con el mismo título.
Cada artículo puede estar escrito por varios autores, de quienes interesa conocer su nombre, una dirección de correo electrónico y su país de nacimiento.
REVISTA ARTÍCULO AUTOR
Revista(1)—(N)Artículo(N)—(N)Autor
Revista: título, ISSN, número, año publicacion
Artículo: título, página inicio y fin
Autor: Nombre, email, país nacimiento
Autor-Artículo:
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer # Para SQL Server dotnet add package Microsoft.EntityFrameworkCore.Tools
Prueba One to Many y Many to Many
Tenemos la tabla ‘Provincias’ con id y nombre
Y la tabla relacionada ‘Ciudades’ con id y nombre también.
Una provincia tiene varias y ciudades y una ciudad una sola provincia.
Añadimos la tabla cliente con id y nombre
Y una relación Many to Many entre cliente y ciudad
Mini ejercicio CodeFirst
Una empresa nos pide que creemos una BD para controlar su inventario. Tienen un almacen con una serie de productos de los que les interesa saber el nombre y la cantidad que tienen (p. ej. tuercas, 20).
Los productos se los compran a unos proveedores y quieren saber el nombre y el telefono de los mismos para que cuando necesiten renovar stock les puedan llamar.
El modelo E/R para esta base de datos es el siguiente:
Cread la BD, el contexto necesario, y las dos entidades. De momento no implementamos la relación. Lo haremos mañana.
Práctica migraciones
Añadimos un campo ‘Raza’ de tipo String a Pajaro
Añadimos la Entidad ‘Jaula’ con Id, Nombre, Ancho,Alto,Largo de tipo int y Precio de tipo Decimal
Añadimos la migracion ‘raza’ cuando añadimos el campo raza
Y la migración Jaula cuando añadimos la entidad jaula
Después actualizamos la base de datos.
Código DAO
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Data.SqlClient; namespace DAOAcademia { internal class DAOAlumno:IDAO<Alumno> { SqlConnection conn; public DAOAlumno() { conn=Conexion.getConn(); } public int Delete(int id) { try { conn.Open(); String sql = "delete alumno where id=@id"; SqlCommand comando = new SqlCommand(sql, conn); comando.Parameters.AddWithValue("@id", id); int res = comando.ExecuteNonQuery(); conn.Close(); return res; } catch (Exception ex) { Console.WriteLine(ex.Message); return 0; } } public List<Alumno> GetAll() { try { conn.Open(); String sql = "select * from alumno"; SqlCommand lectura = new SqlCommand(sql, conn); SqlDataReader sqlDataReader = lectura.ExecuteReader(); List<Alumno> alumnos= new List<Alumno>(); while (sqlDataReader.Read()) { Alumno alumno = new Alumno(sqlDataReader.GetInt32(0), sqlDataReader.GetString(1) ?? "", sqlDataReader.GetString(2)??"", sqlDataReader.GetString(3)??"" ); alumnos.Add( alumno ); } conn.Close(); return alumnos; } catch (Exception ex) { Console.WriteLine(ex.Message); return null; } } public Alumno GetById(int id) { Alumno alumno = null; try { conn.Open(); String sql = "select *from alumno where id=@id"; SqlCommand lectura = new SqlCommand(sql, conn); lectura.Parameters.AddWithValue("@id", id); SqlDataReader sqlDataReader = lectura.ExecuteReader(); if (sqlDataReader.Read()) { alumno = new Alumno(sqlDataReader.GetInt32(0), sqlDataReader[1] as string ??"", sqlDataReader.GetString(2) ?? "", sqlDataReader.GetString(3) ?? "" ); } conn.Close(); return alumno; } catch (Exception ex) { Console.WriteLine(ex.Message); return alumno; } } public int Insert(Alumno alumno) { try { conn.Open(); String sql = "insert into alumno (nombre,dni,email) values (@nombre,@dni,@email)"; SqlCommand comando = new SqlCommand(sql, conn); comando.Parameters.AddWithValue("@nombre", alumno.Nombre); comando.Parameters.AddWithValue("@dni", alumno.DNI); comando.Parameters.AddWithValue("@email", alumno.Email); int res = comando.ExecuteNonQuery(); conn.Close(); return res; } catch (Exception ex) { Console.WriteLine(ex.Message); return 0; } } public int Save(Alumno alumno) { if (alumno.Id == 0) { return Insert(alumno); } else { return Update(alumno); } } public int Update(Alumno alumno) { try { conn.Open(); String sql = "update alumno set nombre=@nombre,dni=@dni,email=@email where id=@id"; SqlCommand comando = new SqlCommand(sql, conn); comando.Parameters.AddWithValue("@nombre", alumno.Nombre); comando.Parameters.AddWithValue("@dni", alumno.DNI); comando.Parameters.AddWithValue("@email", alumno.Email); comando.Parameters.AddWithValue("@id", alumno.Id); int res = comando.ExecuteNonQuery(); conn.Close(); return res; } catch (Exception ex) { Console.WriteLine(ex.Message); return 0; } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DAOAcademia { internal interface IDAO<T> { List<T> GetAll(); T GetById(int id); int Insert(T entity); int Update(T entity); int Save(T entity); int Delete(int id); } }
using System;
using System.Collections.Generic;
using Microsoft.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DAOAcademia
{
internal class Conexion
{
public static SqlConnection getConn()
{
var connection = new SqlConnection();
connection.ConnectionString = “Data Source=.\\SQLEXPRESS;” +
“Initial Catalog=pasiona;Integrated Security=True;” +
“TrustServerCertificate=True”;
return connection;
}
}
}
]/c]