none
Modelo a partir de 2 entidades. RRS feed

  • Pregunta

  • Buenas tardes,

    Estoy empezando con MVC y C#.

    Ahorita estoy desarrollando una pagina para el mantenimiento de proveedores.

    En mi Acceso a datos tengo las siguientes entidades:

     public class ProveedorEntidad
        {
            public int IdProveedor { get; set; }
            public string Nombre { get; set; }
            public string ProveeLineas { get; set; }
            public int IdPais { get; set; }
            public string Contacto { get; set; }
            public string CorreoContacto { get; set; }
            public string Estado { get; set; }
        }

    public class PaisEntidad
        {
            public int IdPais { get; set; }
            public string Nombre { get; set; }
            public string Moneda { get; set; }
        }

    Como se puede observar, hay una relación entre la entidad Proveedor y Pais, la relación es por medio del campo IdPais.

    En mi View quiero mostrar:

    Nombre

    ProveeLineas

    NombrePais

    Moneda

    Obviamente el IdProveedor, IdPais no se debe de mostrar en la lista pero deberia de ir entre los campos para que sea util a la hora de persistir.

    La duda que tengo es, cómo debe de elaborarse el modelo para que contenga datos de ambas entidades de pesistencia?

    Saludos,


    Carlos Márquez
    San Pedro Sula
    Honduras

    jueves, 12 de mayo de 2016 17:52

Respuestas

  • hola Carlos. Utilizas EntityFramework para el acceso a datos? Si es así puedes establecer la relación proveedor país asi

    public class ProveedorEntidad
        {
            public int IdProveedor { get; set; }
            public string Nombre { get; set; }
            public string ProveeLineas { get; set; }
            public int IdPais { get; set; }
            public string Contacto { get; set; }
            public string CorreoContacto { get; set; }
            public string Estado { get; set; }
    public PaisEntidad País { get; set; }
        }

    y en tu Modelo

    public ProveedorModel
    {
    	public string IdProveedor { get; set;}
    public string Nombre { get; set; }
    	public string ProveeLineas { get; set; }
    	public int IdPais { get; set; }
    	public PaisModel País { get; set; }
    }

    Deberá crear un modelo PaisModel

    public class PaisModel
        {
            public int IdPais { get; set; }
            public string Nombre { get; set; }
            public string Moneda { get; set; }
        }


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos




    jueves, 12 de mayo de 2016 19:50
    Moderador
  • >>los campos IdProveedor e IdPais que los necesitaré para la actualización pero que no los quiero mostrar también deben de ir en ese nuevo Model?

    ahh ok pense que usarias la entidad para listar

    si con la misma entidad quieres editar entonces replica como Model ambas entidades de EF, PorveedorModel y PaisModel (con su propiedad de relacion)

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 12 de mayo de 2016 21:09

Todas las respuestas

  • podrias crear una entidad que aplane los datos como ser

    public ProveedorModel
    {
    	public string Nombre { get; set; }
    	public string ProveeLineas { get; set; }
    	public string PaisNombre { get; set; }
    	public string PaisMoneda { get; set; }
    }

    esa sera la entidad que use la view

    ahora tienes dos caminos

    - esa misma entidad al devuelves desde negocio realizando el mapping alli mismo

    - devuelves otra entidad que respete la jerarquia de datos desde negocio y en el controller realizas la transformacion a la entidad ProveedorModel

    si continuas con la idea planteada en otras preguntas deberias tomar la primer opcion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 12 de mayo de 2016 18:14
  •  public class ProveedorEntidad
        {
            public int IdProveedor { get; set; }
            public string Nombre { get; set; }
            public string ProveeLineas { get; set; }
            publicPaisEntidad.IdPais IdPais { get; set; }
            public string Contacto { get; set; }
            public string CorreoContacto { get; set; }
            public string Estado { get; set; }
        }

    public class PaisEntidad
        {
            public int IdPais { get; set; }
            public string Nombre { get; set; }
            public string Moneda { get; set; }
        }

    Lander P.S Herrera

    jueves, 12 de mayo de 2016 18:36
  • Hola, Tuttini.

    Y los campos IdProveedor e IdPais que los necesitaré para la actualización pero que no los quiero mostrar también deben de ir en ese nuevo Model?

    Saludos,


    Carlos Márquez
    San Pedro Sula
    Honduras

    jueves, 12 de mayo de 2016 19:35
  • hola Carlos. Utilizas EntityFramework para el acceso a datos? Si es así puedes establecer la relación proveedor país asi

    public class ProveedorEntidad
        {
            public int IdProveedor { get; set; }
            public string Nombre { get; set; }
            public string ProveeLineas { get; set; }
            public int IdPais { get; set; }
            public string Contacto { get; set; }
            public string CorreoContacto { get; set; }
            public string Estado { get; set; }
    public PaisEntidad País { get; set; }
        }

    y en tu Modelo

    public ProveedorModel
    {
    	public string IdProveedor { get; set;}
    public string Nombre { get; set; }
    	public string ProveeLineas { get; set; }
    	public int IdPais { get; set; }
    	public PaisModel País { get; set; }
    }

    Deberá crear un modelo PaisModel

    public class PaisModel
        {
            public int IdPais { get; set; }
            public string Nombre { get; set; }
            public string Moneda { get; set; }
        }


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos




    jueves, 12 de mayo de 2016 19:50
    Moderador
  • con mi codigo anterior solo usaras en tu vista ProveedorModel. Accediendo a la propiedad País ya tienes los datos del país como el nombre y la moneda. A veces si la entidad es pequeña como PaisEntidad el modelo es idéntico. Espero haberme explicado

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 12 de mayo de 2016 19:55
    Moderador
  • y si, necesitars los idpais e idproveedor para tu vista que los incluiras en campos Hidden

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 12 de mayo de 2016 19:57
    Moderador
  • Hola, Sergio.

    No, el acceso a datos lo hago por medio de ADO.NET.

    Aun así, la forma que planteas aplica? es Decir: crear una propiedad de tipo PaisEntidad?

    public class ProveedorEntidad
        {
            public int IdProveedor { get; set; }
            public string Nombre { get; set; }
            public string ProveeLineas { get; set; }
            public int IdPais { get; set; }
            public string Contacto { get; set; }
            public string CorreoContacto { get; set; }
            public string Estado { get; set; }
            public PaisEntidad País { get; set; }
        }

    Saludos,


    Carlos Márquez
    San Pedro Sula
    Honduras

    jueves, 12 de mayo de 2016 20:05
  • Te lo decía porque EF te lo devuelve por defecto las relaciones del proveedor. Pero claro que aplica perfectamente.

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 12 de mayo de 2016 20:13
    Moderador
  • >>los campos IdProveedor e IdPais que los necesitaré para la actualización pero que no los quiero mostrar también deben de ir en ese nuevo Model?

    ahh ok pense que usarias la entidad para listar

    si con la misma entidad quieres editar entonces replica como Model ambas entidades de EF, PorveedorModel y PaisModel (con su propiedad de relacion)

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 12 de mayo de 2016 21:09
  • Hola, Sergio/Tuttini.

    He querido mapear la Entidad proveedor con el Modelo, pero la entidad de relación hace que se me presente el siguiente error:

     public class ProveedorMapeo
        {
            public static List<ProveedorModelo> MapearTodos(List<ProveedorEntidad> listaProveedor)
            {
                return listaProveedor.ConvertAll(x => new ProveedorModelo()
                {
                    IdProveedor = x.IdProveedor,
                    Nombre = x.Nombre,
                    ProveeLineas = x.ProveeLineas,
                    IdPais = x.IdPais,
                    Contacto = x.Contacto,
                    CorreoContacto = x.CorreoContacto,
                    PaisModelo.Nombre = x.PaisEntidad.Nombre,
                });
            }
        }

    Declarador de miembro de inicializador no válido.

    El ConvertAll() no aplica cuando hy propiedades con relación?

    Saludos,


    Carlos Márquez
    San Pedro Sula
    Honduras

    viernes, 13 de mayo de 2016 16:06
  • es que tienes que crear la instancia

     return listaProveedor.ConvertAll(x => new ProveedorModelo()
                {
                    IdProveedor = x.IdProveedor,
                    Nombre = x.Nombre,
                    ProveeLineas = x.ProveeLineas,
                    IdPais = x.IdPais,
                    Contacto = x.Contacto,
                    CorreoContacto = x.CorreoContacto,
                    PaisModelo = new PaisModelo() { Nombre = x.PaisEntidad.Nombre },
                });

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 13 de mayo de 2016 16:32
  • O mejor aun y mas cómodo.

    en el constructor,por,defecto de ProveedorModel haces

    public ProveedorModel()
    {
     País = new PaisModel();
    }
    así cuando instancies un ProveedorModel, tendrás disponible Pais


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 13 de mayo de 2016 16:46
    Moderador