none
Relacion de 2 tablas con entity framework RRS feed

  • Pregunta

  • Buenas a todos

    Lenague: Asp.net MVC 5

    Herramienta: Visual Studio 2013

    Conocimiento: Básico

    Necesito un ejemplo practico de como trabajar con 2 tablas relacionadas. Ejemplo Películas y genero

    Película                Genero
    ID                         ID
    Nombre                nombre
    id_genero

    Hace muy poco que inicie con MVC y estuve viendo que al crear una clase en el folder Models y un Controller con vista que usa EntityFramework y luego usando la datacontext que trae por defecto el sistema te crea el ABM con su detalle y el index mas las tablas en la base de datos

    lo que quisiera saber es como se maneja cuando hay una relación con otra tabla. porque si yo creo mi models película tal como lo escribí arriba me crea un simple campo int pero no la relación ni el combo, y en el index solo pone el campo en int.

    quiero obtener como resultado

    que cuando entre a LocalhostXXX/peliculas

    que donde dice id_genero salga Genero y el nombre sin romper la estructura en la base

    y en esta otra pantalla

    salga un combo que tome el id

    se que es una pregunta bien básica pero no pude encontrar algo plenamente relacionado a la idea tampoco se si hay forma de generar la base de esa forma. se que la pregunta es larga así que todo tutorial relacionado al tema me sirve para aprender

    desde ya les agradezco por su tiempo y ayuda

    martes, 16 de diciembre de 2014 1:43

Respuestas

  • hola

    pero en la edicion donde tienes el campo de genero deberias mostrar un combo para seleccionar un item del desplegable

     ASP.NET MVC Binding DropDownList using ViewBag and ViewData Example

    puedes ayudarte con el viewbag para enviar la lista de generos a la view y cargar el combo

    con esto seleccionaras un item que enviaras al action para relacionar las entidades

    para conocer como tomar la info en el action podrias analizar

    [ASP.NET MVC] Carga DropDownList dependientes

    ----

    para la lista deberias crear un model diferentes del tipo

    public class PeliculaModel{

    public int Id {get; set;} public string Nombre { get;set;} public string Genero { get;set;} }


    y con linq cargar la relacion

    var peliculas = (from p in context.Peliculas
                        select new PeliculaModel() {
                             Id = p.Id,
                             Nombre = p.Nombre,
                             Genero = p.Genero.Descripcion
                          }).ToList();

    este PeliculaModel se la pasas a la view para que en el listado puedas ver la descripcion del genero

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta boehler sábado, 17 de enero de 2015 21:24
    martes, 16 de diciembre de 2014 10:15

Todas las respuestas

  • Hola,

    En el modelo es que tienes que definir las relaciones. Esto quedaría algo así.

    public class Genero
    {
      public int ID { get; set;}
      public string nombre { get; set;}
    
      public virtual ICollection<Pelicula> Pelicula { get; set; }
    
      public Genero()
      {
        this.Pelicula = new HashSet<>(Pelicula);
      }
    }

    public class Pelicula
    {
      public int ID { get; set; }
      public string nombre { get; set; }
      public int id_genero { get; set; }
    
      public virtual Genero Genero { get; set;}
    
      public Pelicula()
      {
        this.Genero = new Genero();
      }
    }

    Ahora, el controlador CREATE por ejemplo debería tener las siguientes instrucciones:

    public ActionResult Create()
    {
      Pelicula pelicula = new Pelicula();
    
      pelicula.id = 0;
      pelicula.nombre = "la era de hielo";
    
      ViewBag.id_genero = new SelectedList(db.Genero.OrderBy(a => a.nombre), "ID", "nombre");
    
      return view(pelicula);
    }

    Ello generará en la vista lo siguiente:

    @Html.DropDownList("id_genero", String.Empty)

    __________________________________________________________________________________________________
    Espero haberte ayudado con mi sugerencia, si resolvió tu problema no olvides marcarla como respuesta.

    Willams Morales P.
    Arequipa - Perú





    martes, 16 de diciembre de 2014 2:43
  • hola

    pero en la edicion donde tienes el campo de genero deberias mostrar un combo para seleccionar un item del desplegable

     ASP.NET MVC Binding DropDownList using ViewBag and ViewData Example

    puedes ayudarte con el viewbag para enviar la lista de generos a la view y cargar el combo

    con esto seleccionaras un item que enviaras al action para relacionar las entidades

    para conocer como tomar la info en el action podrias analizar

    [ASP.NET MVC] Carga DropDownList dependientes

    ----

    para la lista deberias crear un model diferentes del tipo

    public class PeliculaModel{

    public int Id {get; set;} public string Nombre { get;set;} public string Genero { get;set;} }


    y con linq cargar la relacion

    var peliculas = (from p in context.Peliculas
                        select new PeliculaModel() {
                             Id = p.Id,
                             Nombre = p.Nombre,
                             Genero = p.Genero.Descripcion
                          }).ToList();

    este PeliculaModel se la pasas a la view para que en el listado puedas ver la descripcion del genero

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta boehler sábado, 17 de enero de 2015 21:24
    martes, 16 de diciembre de 2014 10:15
  • Willams,

    En mi opinión la clase Genero no tiene que tener una colección de películas. Cuando se modelan las entidades no hay que "materializar" todas y cada una de las posibles relaciones. En este caso basta con que la pélicula tenga una propiedad género.



    Jesús López


    EntityLite a lightweight, database first, micro orm

    martes, 16 de diciembre de 2014 10:42
  • Gracias por la observación Jesús López. Intente mostrar a boehler como sería la relación de una entidad padre a hijo y viceversa entendiendo que está iniciándose en estos temas consideré oportuno hacerlo pero para el caso estricto del requerimiento es correcto lo que mencionas.
    martes, 16 de diciembre de 2014 15:04
  • Buenas Leandro.

    si la relación de película y genera fuese en vez de 1 a 1, fuese de 1 a n. cómo sería el linq??? es decir si una película tuviera más de un genero.

    martes, 23 de mayo de 2017 10:59