Tengo una pregunta semi complicada sobre Entity Framework4, expresiones Lambda y Data Transfer Objects (DTO).EF4, Lambda, patrón de repositorio y DTOs
Así que tengo un pequeño proyecto EF4, y siguiendo los principios OO establecidos, tengo un DTO para proporcionar una capa de abstracción entre los consumidores de datos (GUI) y el modelo de datos.
- VideoDTO = DTO con getters/setters, utilizado por la GUI
- VideoEntity = Entidad generada por EF4
Mi pregunta gira en torno al uso de la DTO por la interfaz gráfica de usuario (y no tener la La GUI usa la Entidad en absoluto), combinada con la necesidad de pasar una lambda a la capa de datos. Mi capa de datos es un patrón básico de repositorio con Agregar. Cambiar, borrar, Get, GetList, etc. Tratando de poner en práctica un método de búsqueda con una firma de este modo:
public IEnumerable<VideoDTO> Find(Expression<Func<VideoEntity, bool>> exp)
...
_dataModel.Videos.Where(exp).ToList<Video>()
---
Mi problema/preocupación es la de "CAD" necesidad de ser del tipo VideoEntity en lugar de VideoDTO. Quiero preservar la separación de las preocupaciones para que la GUI no conozca los objetos de la Entidad. Pero si trato de pasar
Func<VideoDTO, bool>
No puedo hacer un LINQ Donde en esa expresión usando el modelo de datos real.
¿Hay una manera de convertir un Func<VideoDTO,bool>
a un Func<VideoEntity, bool>
Lo ideal sería que mi firma método aceptaría Func<VideoDTO, bool>
y de esa manera la interfaz gráfica de usuario no tendría ninguna referencia a la entidad de datos subyacente.
¿Es esto lo suficientemente claro? Gracias por su ayuda
Gracias por las respuestas a los dos.
Voy a probar la idea de definir los criterios de búsqueda en un objeto y usar eso en la expresión LINQ. Empezando con EF4 y L2S, usando esto como un proyecto de aprendizaje.
¡Gracias nuevamente!