none
Cambiar tipo de registro de db a modelo de MVC RRS feed

  • Pregunta

  • Hola, estoy aprendiendo a desarrollar una aplicacion web con MVC y EF. Les explico como tengo separado los proyectos.

    Un proyecto MVC, donde unicamente uso los controller y vistas.

    Un proyecto de entidades, donde tengo las clases que uso en la db.

    Un proyecto de datos, donde tengo la conexion a la db con EF.

    Un proyecto de logica de negocios donde hago las consultas.

    Mi duda es la siguiente, suponiendo que tengo una tabla Articulo en la base de datos con (ID, Titulo, Contenido), lo que yo hago para obtenerla de la db es esto:

    public List<Article> GetArticle()
            {
                DBContext db = new DBContext();
    
                List<Article> lista = db.Articulo.ToList();
    
                return lista;
            }


    Lo que hago ahi, es crear una lista de Article (que es la clase que tengo en el proyecto Entidad), y esa lista la lleno con la tabla Articulo, que es la tabla de la db. Mi problema ahi es que me da un error,

    No se puede convertir implícitamente el tipo 'System.Collections.Generic.List<Datos.Articulo>' en 'System.Collections.Generic.List<Entidades.Article>'

    Supongo que necesitare hacer una conversion, mis preguntas serian, primero esta bien como estoy resolviendo el problema de obtener los datos de la db? Si es asi, y si necesito entonces convertirlo a mi modelo de Entidades, como se haria esta conversion?.

    Desde ya gracias.

    Edito: lo solucione de esta forma a la conversion

    public List<Article> GetArticle()
            {
                DBContext db = new DBContext();
                List<Article> lista = new List<Article>();
                List<Articulo> obj = db.Articulo.ToList();
                foreach (var item in obj)
                {
                    Article art = new Article();
                    art.ID = item.ID;
                    art.Titulo = item.Titulo;
                    art.Contenido = item.Contenido;
                    art.FechaCreacion = item.FechaCreacion;
                    art.Activo = item.Activo;
                    art.EsObra = item.EsObra;
                    lista.Add(art);
                }
                return lista;
            }


    Estaria bien hecho?


    • Editado Nacho Sa jueves, 14 de marzo de 2019 15:09
    jueves, 14 de marzo de 2019 14:41

Respuestas

  • Sí, así puedes hacer la conversión si la necesitas. Si no quieres molestarte en escribir ese código para todas tus tablas una por una, existe una librería llamada AutoMapper (puedes añadirla como paquete NuGet) que puede hacer esa conversión automáticamente.

    Pero solo tiene sentido hacer este tipo de conversiones si vas a usar entidades que son diferentes en tu capa de datos y en tu capa Entidad. Si vas a usar exactamente los mismos campos con los mismos tipos, como parece inferirse del ejemplo que has puesto, entonces basta con que definas una sola clase y la uses en los dos sitios, ubicándola en una capa "transversal" a la que tienen Referencias el resto de las capas. Si la decoras con los atributos oportunos la puedes usar para EF, y esos atributos no molestan nada cuando la usas desde cualquier otra capa.

    • Propuesto como respuesta Sergio Parra jueves, 14 de marzo de 2019 21:06
    • Marcado como respuesta Nacho Sa martes, 19 de marzo de 2019 0:41
    jueves, 14 de marzo de 2019 20:45