none
EF retornar el resultado de una consulta pera ese resultado no exsite como entidad como lo retorno

    Pregunta

  • Hola podrían apoyarme con algo que quiero hacer

    estoy creando un clase PaqueteService, que pertenece a la libreria DomainService, esta clase es la responsable de ser la conexión con mi capa de negocio y de servir toda la información ya sea a un servicio o una app lo que sea.

    Mi WebApi necesita un metodo Post que retorna dos listas de objetos convertidas en json claro, eso lo hace mi webApi

    pero mi DomainService.PaqueteService tiene la responsabilidad de darle esa informacion, no creo que deba ser en json sino en entidades, mi WebApi es quien tiene la responabilidad de hacer el metodo post get etc y convertir entidades a json.

    Explicado esto les pongo mis entidades.

    public class Membresia
        {
            public int Id { get; set; }
            public string Description { get; set; }
        }
    
        public class Compañia
        {
            public int Id { get; set; }
            public string Description { get; set; }
        }

    esas entidades tienen sus repositorios, Unity Of Work y todo eso. aqui esta mi clase paqueteService

    public class PaqueteService : IPaqueteService
        {
            private readonly IUnityOfWork unityOfWork;
    
            public PaqueteService(IUnityOfWork unityOfWork)
            {
                this.unityOfWork = unityOfWork;
            }
            public List<NoseQuePoner> Buscar()
            {
                //Este metodo tiene que regresar dos listas Compañia y Membresia
                // los Metodos ReadAll regresan IQueryable
                var Compañia = this.unityOfWork.Compañia.ReadAll();
                var Membresia = this.unityOfWork.MembresiaRepository.ReadAll();
            }
        }

    como pueden ver mi servicio Web requiere dos listas en un metodo para tranformarlos en json y retornarlos

    Esta clase se los debe proporcionar, pero ese objeto no existe no esta en mi base de datos, no es una entidad, es el resultado de una consulta y quiero retornarla, que debo hacer crear una entidad que tenga esas dos listas y retornarla, aunque no existe en mi modelo de negocio. ni en mi base de datos

    ahora una duda mas estos metodos 

    this.unityOfWork.Compañia.ReadAll();
    this.unityOfWork.MembresiaRepository.ReadAll();

    retornar y IQueryable hasta hay no han consultado nada, hasta que les haga un foreach o un toList

    pero como hago para que sean una sola consulta, no quiero que EF valla traiga las compañias y despues valla y traiga las membresias, como hago para que las traiga en una sola consulta y en que las guardo para poder retornarlas

    • Cambiado webJose viernes, 29 de junio de 2018 2:47
    jueves, 28 de junio de 2018 23:36

Todas las respuestas

  • En un caso como este, definirías una clase ex-profeso solo para retornar ese valor:

    public class DatosADevolver
    {
        IEnumerable<loQueSea> Compañia { get; set; }
        IEnumerable<laOtraEntidad> Membresia { get; set; }
    }

    Y luego en Buscar devolverías un dato de esta clase.

    Si fuera un servicio REST hecho con el WebApi, esta clase podría ser anónima, pero por lo que veo estás haciendo un WCF por lo que necesitas definir la clase expresamente y exponerla en el DataContract.

    Por cierto, he tenido que poner "loQueSea" y "laOtraEntidad" porque no sé cuál es el tipo que tienen. Esto se debe a que has cometido la mala práctica de definirlas como "var" en donde dices, por ejemplo, var Compañia = this.unityOfWork.Compañia.ReadAll(). Esto hace el código poco legible, porque habría que acudir a donde esté definido el método ReadAll para ver cuál es el tipo que en realidad se está devolviendo. Solo es aconsejable usar "var" cuando el tipo es anónimo, o cuando es visible en la misma línea tal como var x=new MiTipo();. Pero cuando se inicializa con una función, conviene escribir al completo el nombre de la clase para facilitar la lectura del código.


    viernes, 29 de junio de 2018 6:10