none
Consulta básica RRS feed

  • Pregunta

  • Buenas noches

    Voy a hacer una pregunta básica disculpen. Tengo una duda, programo en MVC C#, pero estoy retomando desde hace mucho tiempo la programación y ya tengo conocimiento, pero tengo esta duda tonta pero espero que me sepan ayudar. Tengo una Clase Cliente que ese cliente va a asociarse con otro cliente, como para hacer un grupo. Ahora lo que estoy haciendo, estoy llamando a una PartialView con una clase asociado que viene a tener . Asociado es una autorelación de Cliente

    public class Cliente
        {
            public int ClienteId { get; set; }
            public string NombreComercial { get; set; }
            [Required]
            public string Nombre { get; set; }
            public string Cedula { get; set; }
            public string CorreoElectronico { get; set; }
            public string Direccion { get; set; }
            public string Localidad { get; set; }
            public string Telefono { get; set; }
            public string Usuario { get; set; }
            public string Observacion { get; set; }
            public virtual ICollection<VentaProducto> VentasProductos { get; set; }
            public virtual ICollection<Historial> Historial { get; set; }
            public virtual ICollection<Abono> Abonos { get; set; }
            
        }
    public class Asociado
        { 
            public int AsociadoId { get; set; }
            public int ClienteId { get; set; }
            public int ClienteAsociadoId { get; set; }
            public DateTime FechaAsociacion { get; set; }
        }

    Pero mi duda es, que cuando traigo al cliente principal (PK) "ClienteId" para mostrar en una partialview de las personas asociadas con ese cliente, el tema es que estoy guardando en la base solo el ClienteAsociadoId (que viene a ser el ClienteId (FK) osea otro cliente pero asociado), pero para traer el nombre hago una llamada en el controller a una clase ModelView que cree 

    public class AsociadoViewModel
        {
            public Asociado UnAsociado { get; set; }
            public string Nombre { get; set; }
        }

    public ActionResult MostrarAsociados(int ClienteId) { List<Asociado> ListaAsociados = db.Asociadoes.Where(x=>x.ClienteId == ClienteId).ToList(); List<AsociadoViewModel> auxListaAsociados = new List<AsociadoViewModel>(); foreach (Asociado auxAsociado in ListaAsociados) { auxListaAsociados.Add(new AsociadoViewModel() { Nombre = db.Clientes.Find(auxAsociado.ClienteAsociadoId).Nombre, UnAsociado = auxAsociado }); }; return PartialView("_ClienteAsociado", auxListaAsociados);

    }

    Yo no se si mejor creo otro item en la clase Asociado con el item Nombre (del cliente asociado) o es mejor no ponerlo y ahorrarse ese item de el nombre en la base porque ya lo tenemos en la clase Cliente. 

    public class Asociado
        { 
            public int AsociadoId { get; set; }
            public int ClienteId { get; set; }
            public int ClienteAsociadoId { get; set; }
            public string Nombre { get; set; }       < ---------------------- 
            public DateTime FechaAsociacion { get; set; }
        }

    Mi pregunta que manera es mejor para programar, que tenga menos items en la base de datos o evitar cantidad de código y agregar el Nombre a la clase asociado.

    Espero que me haya hecho entender.

    Gracias.

    PD: El nombre en asociado ya lo tenemos en el Cliente, es mejor llamar con el AsociadoId el nombre que esta en la clase Cliente o mejor es crear un parámetro Nombre en la clase Asociado?. Yo pienso y digo, si lo agrego tengo el mismo nombre que tengo en cliente en el asociado también, entonces no se como es mejor programar, llamar con el AsociadoId al nombre de la clase cliente o guardar el nombre también en la clase asociado.


    • Editado Ja1000_pu martes, 30 de abril de 2019 5:44
    martes, 30 de abril de 2019 5:42

Respuestas

  • hola

    >>el tema es que estoy guardando en la base solo el ClienteAsociadoId (que viene a ser el ClienteId (FK) osea otro cliente pero asociado)

    Si estas persistiendo un ClienteAsociadoId en la entidad Cliente entonces esa class Asociado que defines no aplica, sino que seria

    public class Cliente{
    
       //otras propiedades
    
      public int ClienteAsociadoId {get;set;}
      public Cliente Asociado {get;set;}
    
    }


    Con esto generas un referencia a la misma tabla en una relacion uno a muchos

    Si defines la class Ascoiado entonces estas modelando una relacion muchos a muchos, o sea un cliente puede tener mas de un asociado, en el ViewModel de Cliente es una lista de asociados y no una sola entidad

    >>no se si mejor creo otro item en la clase Asociado con el item Nombre (del cliente asociado) o es mejor no ponerlo

    no lo pingas, la relacion ya define el nombre, tienes que navegar por las propiedades

    	public class Asociado
    	{ 
    		public int AsociadoId { get; set; }
    		
    		public int ClienteId { get; set; }
    		public Cliente Cliente { get; set; }
    		
    		public int ClienteAsociadoId { get; set; }
    		public Cliente Asociado { get; set; }  
    		
    		public DateTime FechaAsociacion { get; set; }
    	}
    

    debes mapar la navegacion en entity framework

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Ja1000_pu jueves, 2 de mayo de 2019 17:58
    martes, 30 de abril de 2019 13:49