Anexsoft | Blog y dictado de cursos de Tecnología

En este encontrarás tutoriales de tecnología como PHP, ASP.NET MVC, Front-End, entre otros y cursos exigentes de modalidad online que te ayudarán a crecer profesionalmente.

ASP.NET MVC: obteniendo un registro y sus relaciones
Actualizado el 21 Enero, 2016 y leído 14,669 veces
Calificación: 8.00 / 10

ASP.NET MVC: obteniendo un registro y sus relaciones

Anexsoft

Seguimos con nuestro proyecto, ahora lo que nos toca ver es el método Obtener, el cual nos va a retornar un registro de nuestra base de datos y a su vez, tenemos que traer sus relaciones.

Clase Alumno

Veamos como se encuentra nuestra clase Alumno, la cual ha tenido una serie de cambios.

[Table("Alumno")]
public partial class Alumno
{
    public Alumno()
    {
        Cursos = new List<Curso>();
    }

    public int id { get; set; }

    [Required]
    [StringLength(50)]
    public string Nombre { get; set; }

    [Required]
    [StringLength(100)]
    public string Apellido { get; set; }

    public ICollection<Curso> Cursos { get; set; }

    public List<Alumno> Listar() 
    {
        var alumnos = new List<Alumno>();
        try
        {
            using (var context = new TestContext()) 
            {
                alumnos = context.Alumno.ToList();
            }
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }

        return alumnos;
    }

    public Alumno Obtener(int id) 
    {
        var alumno = new Alumno();
        try
        {
            using (var context = new TestContext())
            {
                alumno = context.Alumno
                                .Include("Cursos")
                                .Where(x => x.id == id)
                                .Single();
            }
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }

        return alumno;
    }
}

 

Propiedad "Cursos"

¿Cual es lo nuevo?, hemos creado la propiedad Cursos, la cual se encargará de almacenar a todos los Cursos que tiene elegido dicho alumno.

public ICollection<Curso> Cursos { get; set; }

Como buena práctica, hemos creado un constructor e inicializamos esta propiedad para que por defecto tengo un valor.

public Alumno()
{
    Cursos = new List<Curso>();
}

 

Método "Obtener()"

Como yo soy de la idea de encapsular nuestra lógica, he creado el método obtener encargado obtener un registro de nuestra base de datos, como parámetro de entrada espera que se le pase el ID de la fila a consultar.

public Alumno Obtener(int id) 
{
    var alumno = new Alumno();
    try
    {
        using (var context = new TestContext())
        {
            alumno = context.Alumno
                            .Include("Cursos")
                            .Where(x => x.id == id)
                            .Single();
        }
    }
    catch (Exception e)
    {
        throw new Exception(e.Message);
    }

    return alumno;
}

Vemos que se está llamando a un método Include y le pasamos el valor de la propiedad que queremos llenar, en nuestro caso la propiedad Cursos, luego este se encargará de hacer la consulta la base de datos para traer los cursos que tiene el alumno.

¿Como sabe el include que tablas debe consultar para manejar la relación?

Vamos a nuestra clase TextContext y al método OnModelCreating.

modelBuilder.Entity<Alumno>()
    .HasMany(e => e.Cursos)
    .WithMany(e => e.Alumno)
    .Map(m => m.ToTable("AlumnoCurso"));

Este es el encargado de decirle que tabla es la que relaciona al Alumno y a los Cursos, por defecto el Entity Framework sabe que los campos deben contener el siguiente prefijio _id. Por lo tanto, buscará los campos de esta manera ("TABLA" + "PREFIJO"), osea "Alumno_id" y "Curso_id".}

Image title

NOTA:el entity framework por defecto permite navegar entre las propiedades y realizar las consultas a la base de datos porque tiene activado el LazyLoad, del caso contrario deberíamos hacer un query al Contexto actual.

 

Mostrando el alumno obtenido

Para ello vamos a crear una nueva acción, que se llamará Ver, el cual espera que se la pase el ID del registro a traer.

public ActionResult Ver(int id)
{
    return View(alumno.Obtener(id));
}

Seguidamente creamos su vista:

@model Model.Alumno
@{
    ViewBag.Title = Model.Nombre + " " + Model.Apellido;
}

<ol class="breadcrumb">
  <li><a href="~/">Alumnos</a></li>
  <li class="active">@(Model.Nombre + " " + Model.Apellido)</li>
</ol>

<div class="panel panel-default">
  <div class="panel-heading">Información personal</div>
  <div class="panel-body">
    <dl class="dl-horizontal">
      <dt>Nombre</dt>
      <dd>@Model.Nombre</dd>
      <dt>Apellido</dt>
      <dd>@Model.Apellido</dd>
    </dl>
  </div>
</div>

<div class="panel panel-default">
  <div class="panel-heading">Asignaturas seleccionadas</div>
  <div class="panel-body">
    <ul class="list-group">
    @foreach (var c in Model.Cursos) 
    {
        <li class="list-group-item">
            @c.Nombre
        </li>
    }
    </ul>
  </div>
</div>

De esta forma es como podemos obtener un registro de la base de datos y su relación, recomiendo que vean el VIDEO ya que ahí hacemos todo lo de este post paso a paso y más. Además, vamos a ir viendo la maquetación de nuestro proyecto usando Bootstrap 3.

 

Partes:

¡Adquiera ya!

  • Software de Venta e Inventario hecho en PHP y Codeigniter

    Software de Venta e Inventario hecho en PHP y Codeigniter
  • Código de fuente de Red Social desarrollada en ASP.NET MVC

    Código de fuente de Red Social desarrollada en ASP.NET MVC

Últimas publicaciones

Encuesta

¿Cómo nos conociste?

Síguenos

Estudia con nosotros y crece profesionalmente

Nuestros cursos han sido hecho en base a lo que demanda el mercado hoy en día.
La experiencia obtenida es la de un ambiente laboral.

Anexsoft
© 2017 Anexsoft, blog y cursos online de TI.