Join two models in asp.net mvc 5 c # - N CAPAS

0

I have two models:

public class TipoSolicitudesDTO
{
    [Key]
    public int TipoSolicitudID { get; set; }
    public string NombreTipoSolicitud { get; set; }
    public int EstadoTipoSolicitud { get; set; }       
}

public class SolicitudesDTO
{
    [Key]
    public int SolicitudID { get; set; }
    public DateTime FechaEmision { get; set; }
    public DateTime FechaInicio { get; set; }
    public DateTime FechaFin { get; set; }
    public string Observacion { get; set; }
    public int Estado { get; set; }
    public int Id { get; set; }
    public int TipoSolicitudID { get; set; }        
}

is a ratio of 1 to *.

public List<SolicitudesDTO> ObtenerSolicitudes(int id)
    {
        //Se crea la lista que se enviara como resultado.
        List<SolicitudesDTO> lista = new List<SolicitudesDTO>();
        //Se instancia la conexion de datos
        using (SqlConnection conn = ConexionDAL.ConexionSQL())
        {
            // se setea el comando que define el procedimiento almacenado y conexion a utilizar para obtener los datos desde la bd.
            using (SqlCommand comando = new SqlCommand("ListarPermisos", conn))
            {
                comando.CommandType = System.Data.CommandType.StoredProcedure;

                comando.Parameters.Add(new SqlParameter("@id", id));

                //Se instancia el adapter, que sirve para ejecutar el comando.
                using (SqlDataAdapter adap = new SqlDataAdapter(comando))
                {
                    DataTable tbResultados = new DataTable();

                    //ejecuto el comando utilizando el adapter y lleno la tabla con los datos obtenidos.
                    adap.Fill(tbResultados);

                    //si se lograron extraer datos entonces agregare todos los objetos a la lista.
                    if (tbResultados.Rows.Count > 0 || tbResultados.Rows != null)
                    {
                        for (int i = 0; i < tbResultados.Rows.Count; i++)
                        {
                            DataRow fila = tbResultados.Rows[i];
                            SolicitudesDTO Solicitud = new SolicitudesDTO();                                
                            Solicitud.SolicitudID = Convert.ToInt32(fila["SolicitudID"]);
                            Solicitud.FechaEmision = Convert.ToDateTime(fila["FechaEmision"]);
                            Solicitud.FechaInicio = Convert.ToDateTime(fila["FechaInicio"]);
                            Solicitud.FechaFin = Convert.ToDateTime(fila["FechaFin"]);
                            Solicitud.Observacion = Convert.ToString(fila["Observacion"]);
                            Solicitud.Estado = Convert.ToInt32(fila["Estado"]);
                            Solicitud.Id = Convert.ToInt32(fila["Id"]);
                            Solicitud.TipoSolicitudID = Convert.ToInt32(fila["TipoSolicitudID"]);     
                            lista.Add(Solicitud);
                        }
                    }
                }//FIN ADAPTER
            }//FIN COMANDO
        }//FIN CONEXION

        return lista;
    }

Is only the Class Requests being added as I add the class TypeRequests to also fill it out from my SP ??

List Permissions: It is the following inner join in sql server

    create proc ListarPermisos
    @id int
    as
    SELECT * FROM tipoSolicitudes
    INNER JOIN Solicitudes ON tiposolicitudes.TipoSolicitudID= solicitudes.TipoSolicitudID 
where id=@id
    
asked by Luis Vega 09.04.2018 в 23:21
source

1 answer

0

As I interpret the Data Transfer Object (DTO), it is that a Request Type can have MANY Requests.

For which I recommend you modify the DTO, Requests:

public class SolicitudesDTO
{
    [Key]
    public int SolicitudID { get; set; }
    public DateTime FechaEmision { get; set; }
    public DateTime FechaInicio { get; set; }
    public DateTime FechaFin { get; set; }
    public string Observacion { get; set; }
    public int Estado { get; set; }
    public int Id { get; set; }
    public TipoSolicitudesDTO TipoSolicitud {get;set;}
}

Likewise at the time of filling in the information (In the instruction, for), you should try the following:

               for (int i = 0; i < tbResultados.Rows.Count; i++)
                    {
                        DataRow fila = tbResultados.Rows[i];
                        SolicitudesDTO Solicitud = new SolicitudesDTO();                                
                        Solicitud.SolicitudID = Convert.ToInt32(fila["SolicitudID"]);
                        Solicitud.FechaEmision = Convert.ToDateTime(fila["FechaEmision"]);
                        Solicitud.FechaInicio = Convert.ToDateTime(fila["FechaInicio"]);
                        Solicitud.FechaFin = Convert.ToDateTime(fila["FechaFin"]);
                        Solicitud.Observacion = Convert.ToString(fila["Observacion"]);
                        Solicitud.Estado = Convert.ToInt32(fila["Estado"]);
                        Solicitud.Id = Convert.ToInt32(fila["Id"]);
                        Solicitud.TipoSolicitudID = new TipoSolicitudesDTO()
                        {
                            TipoSolicitudID = Convert.ToInt32(fila["TipoSolicitudID"]),
                            NombreTipoSolicitud  = Convert.ToString(fila["NombreTipoSolicitud"]),
                            EstadoTipoSolicitud = Convert.ToInt32(fila["EstadoTipoSolicitud"])
                        }
                        lista.Add(Solicitud);
                    }

However it is not recommended, because it will have repeated request types (since a request can have many types of requests).

    
answered by 09.04.2018 в 23:51