DTO en WCF RIA Services Master-Detail
-
12-11-2019 - |
Pregunta
Tengo que crear un escenario Maestro-Detalle donde en el maestro puedo mostrar muchos tipos de elementos, que todos implementan. IDto
:
interface IDto
{
int Id { get; set; }
string Title { get; set; }
EntityType { get; set;
}
enum EntityType
{
Contact,
Person,
Company,
Customer
Employee,
Vendor,
Job
}
Nota:Estoy usando Entity Framework EDM (generado ObjectContext
y EntityObject
s).
La jerarquía de clases es que Contact
es la subclase para Person
y Company
, Person
es la clase base de Employee
, Company
es la clase base de Vendor
. Customer
tiene una propiedad Contact
eso puede ser un Contact
o un Person
, y tiene una lista de Job
.
Ahora, en la lista maestra, quiero cargar una colección de DTO del DomainService
(es un LinqToEntitiesDomainService<ObjectContext>
, y solo quiero los campos especificados en el IDto
contrato que se va a seleccionar y luego, cuando se seleccione, cargar toda la entidad con todos sus campos/datos relacionados, etc.en el área de detalles.
Actualizar:Pensé en otra idea.
Cree una vista de base de datos (SQL2008) que devuelva las 3 filas de lo anterior IDto
contrato donde la enumeración se almacenará como int o tinyint (luego cambiará la enumeración a byte), luego en el edm puedo hacer una tabla por jerarquía para cada EntityType almacenado en la lista y devolverla desde el DomainService
.
Por cierto, todos los valores de enumeración se utilizarán para la consulta; de hecho, ninguna entidad devolverá Contact
por su EntityType
propiedad, porque Contact
es abstracto y puede ser un Person
o un Company
, pero aún quiero tener una opción para consultarlos a ambos.
Actualización 2
El cliente también quiere, para cada uno de los artículos de la lista, también todos sus trabajos.
Basado en la jerarquía que describí anteriormente, por un Customer
- seleccionar todos sus trabajos;para Contact
o un Person
- seleccione su Customer
's Job
s (si es un Customer
). Vendor
o Employee
s no están destinados a registrarse con Job
s.
Creo que la única forma en que puedo hacer esto es con vistas de bases de datos.
¿Me equivoco?¿Cuáles son las consecuencias?Estoy usando SL5 con RIA.
¿Las vistas son muy buenas?¿O debería manejar todas las consultas en el cliente utilizando un cliente POCO?porque en realidad este valor solo se usa para recuperar el nombre del contacto y sus trabajos.Se realizarán más detalles y manipulación en otras vistas del Entity
entidades mismas.
Entonces, ¿qué opinan los expertos?
Solución
He encontrado este publicación muy útil, y de hecho me permitió tomar una decisión.
- Las vistas de bases de datos no son necesariamente el enfoque correcto
- Devolverá las entidades parciales a través de POCO DTO desde el servicio de dominio.