DTO in WCF RIA Servizi Master-Dettaglio
-
12-11-2019 - |
Domanda
Devo creare uno scenario Master-Detail in cui nel master posso mostrare molti tipi di elementi, che tutti implementano IDto
:
interface IDto
{
int Id { get; set; }
string Title { get; set; }
EntityType { get; set;
}
enum EntityType
{
Contact,
Person,
Company,
Customer
Employee,
Vendor,
Job
}
Nota:Sto usando Entity Framework EDM (generato ObjectContext
e EntityObject
s).
La gerarchia di classe è che Contact
è la sottoclasse per Person
e Company
, Person
è la classe di base di Employee
, Company
è la classe di base di Vendor
. Customer
ha una proprietà Contact
che può essere sia un Contact
o un Person
, e ha una lista di Job
.
Ora nella lista principale, voglio caricare una raccolta di DTO dal DomainService
(è un LinqToEntitiesDomainService<ObjectContext>
, e voglio solo i campi specificati nel IDto
contratto da selezionare, quindi, quando selezionato, caricare l'intera entità con tutti i suoi campi / dati correlati ecc.nell'area dettagli.
Aggiornare:Ho pensato a un'altra idea.
Creare una vista database (SQL2008) che restituisce le 3 righe di cui sopra IDto
contratto in cui l'enum verrà memorizzato come int o tinyint (cambierà quindi l'enum in byte), quindi nell'edm posso creare una tabella per gerarchia per ogni EntityType memorizzato nell'elenco e restituirlo dal DomainService
.
A proposito, tutti i valori enum verranno utilizzati per la query, infatti, nessuna entità restituirà Contact
per la sua EntityType
proprietà, perché Contact
è astratto e può essere Person
o un Company
, ma voglio ancora avere un'opzione per interrogarli entrambi.
Aggiornamento 2
Il cliente vuole anche, per ciascuno degli articoli in lista, anche tutti i suoi lavori.
Sulla base della gerarchia che ho descritto sopra, per un Customer
- seleziona tutti i suoi lavori;per un Contact
o un Person
- selezionare il suo Customer
di Job
s (se è a Customer
). Vendor
o Employee
s non sono destinati ad essere registrati con Job
s.
Penso che l'unico modo in cui posso farlo sia con le viste del database.
Mi sbaglio?Quali sono le conseguenze?Sto usando SL5 con RIA.
Le viste sono buone?O dovrei gestire tutte le query nel client usando un client POCO?perché in realtà questo valore viene utilizzato solo per recuperare il nome del contatto e i relativi processi.ulteriori dettagli e la manipolazione sarà fatto in altri punti di vista sul Entity
entità loro stessi.
Cosa ne pensano gli esperti?
Soluzione
Ho trovato questo post molto utile, e in realtà mi ha permesso di una desicion.
- Vista del database non è necessariamente l'approccio giusto
- Restituirà le entità parziali attraverso POCO DTO dal servizio di dominio.