Stiamo avviando un nuovo prodotto basato sul Web in cui intendiamo esporre la nostra logica aziendale tramite i servizi WCF. Useremo ASP.NET 4.0, C#, EF 4.0. In futuro vogliamo costruire applicazioni iphone e applicazioni WPF basate sui servizi. Ho letto molto sull'utilizzo di POCO vs Self Tracking Entities (STE) e da quanto ho capito gli STE non funzionano bene con lo scenario web. Qualcuno può fare più luce su questo problema?Entità di tracciamento automatico vs Entità POCO
risposta
Per me STE è un concetto assolutamente sbagliato. È solo un'altra implementazione di DataSet.
- Nell'applicazione ASP.NET è necessario memorizzare STE tra le richieste. Nella prima richiesta interrogerai la tua origine dati per ottenere STE e fornire dati nella pagina. Nella prossima richiesta (postback) si vorrà modificare STE con i dati restituiti dal browser. Per supportare il tracciamento dovrai utilizzare lo stesso STE della prima richiesta = > dovrai memorizzare STE in viewstate (se vuoi utilizzare i WebForms ASP.NET) o sessione.
- STE è inutile per SOA o interoperabilità. La logica di tracciamento è parte di STE = è in esecuzione sul client. Se esponi STE nel servizio, ti aspetti immediatamente che quella parte del cliente utilizzerà le stesse funzionalità di tracciamento incluse nella logica STE. Ma queste funzionalità non sono fornite automaticamente dall'altra parte. In .NET li hai perché condividi l'assembly con STE. Ma su un'altra piattaforma devi spiegare agli sviluppatori come implementare la logica di STE per farlo funzionare dalla tua parte. Questo sarà probabilmente il caso più limitante per te a causa dell'applicazione iPhone.
In ASP.NET, perché non mostrare solo STE alla prima richiesta e al postback ottenere STE dal database, aggiornare i campi e salvare? –
Se si è soddisfatti con query di database aggiuntive, non è necessario STE, tranne la modifica di grafici di oggetti complessi. Puoi consentire a ObjectContext (con i proxy POCO) di tenere traccia delle modifiche per te. –
"STE è inutile per SOA o interoperabilità." Sono completamente d'accordo. Sfortunatamente la gente sembra insistere nel vedere SOA e WCF come remoti. Certo, può essere fatto, ma poi stai dando molta fiducia al cliente. –
Le entità di tracciamento automatico funzionano perfettamente in un MVC Web con scenario WCF. Sono stato coinvolto in 2 progetti che li utilizzano (uno in produzione, uno quasi).
Con POCO si perderebbe il rilevamento delle modifiche sul filo che crea molto dolore extra perché EF ora deve richiedere nuovamente informazioni sullo stato. Se stai usando EF e WCF STE risolvi un sacco di problemi e rendi la tua intera pipeline di persistenza davvero fluida.
Potete fornire la citazione per questo reclamo? "STE non funzionano bene con lo scenario web"
Come stai persistendo il tuo STE tra richieste (es. GET -> POST)? –
@jfar, nello scenario WCF il concetto di "Platform Independent Services" viene perso se si utilizza STE (a.k.a Self Tracking Entities). Ad esempio, cosa succede se c'è un'applicazione client Java che vuole interagire con il servizio WCF. In che modo l'applicazione client Java ottiene i SET dal lato client? Sfortunatamente, semplicemente non può! Significa che, se stiamo utilizzando STE, il nostro servizio WCF può essere utilizzato solo dai client integrati in .Net. Che cosa è terribile vero? – Baig
Se questo servizio sta per essere consumato da qualsiasi applicazione non si ha il controllo diretto sulle, probabilmente si dovrebbe prendere in seria considerazione il divorzio a che fare con EF (o NHibernate o Linq2Sql o qualsiasi altra soluzione di gestione dei dati di persistenza) dai tuoi servizi e dai tuoi oggetti per il trasferimento dei dati. Ciò isolerà i cambiamenti interni dai clienti in avaria. Rompere i clienti è in genere una brutta cosa.
Vedere http://msdn.microsoft.com/en-us/data/jj613924.aspx, poiché STE non è più consigliato! Microsoft consiglia l'utilizzo di API Web ASP.NET, WCF Data Services o Entity Framework API (operazioni complesse)
- 1. Entità Framework POCO Entità nell'applicazione web multistrato
- 2. Servizi dati WCF e entità di tracciamento automatico
- 3. Oggetti business vs. entità
- 4. entità quadro entità sql vs linq alle entità
- 5. Quadro entità, POCO e una proprietà privata
- 6. T4 per la generazione di POCO su entità LLBLGen Pro?
- 7. in entità DDD vs servizi
- 8. DOMDocument :: loadXML vs. entità HTML
- 9. Converti entità entità nell'entità
- 10. Entità Framework 5 POCO non inclusi in TFS?
- 11. Entità distaccata e entità gestita
- 12. Istanziazione componente vs Entità istanziata in VHDL
- 13. Entità DTD vs XML-Schema Elementi
- 14. mappatura codice struttura entità entità privata prima
- 15. Classi basate su Entity Framework POCO Vs?
- 16. Mappatura entità RestKit e mappatura entità padre
- 17. Entità Doctrine clone profondo con entità correlate
- 18. DTO in entità e entità in DTO
- 19. materializzazione entità personalizzata
- 20. Risolvi entità di destinazione con più gestori di entità
- 21. Entità di aggiornamento EF4 senza prima entità di acquisizione
- 22. Entity Framework vs Linq alle entità vs Linq a SQL
- 23. Java: conversione di entità html denominate in entità xml numerate
- 24. Nome entità HTML rispetto al numero di entità?
- 25. JPA Mappa w/Entità chiave e valore di entità
- 26. LINQ to entità AcceptAllChanges SaveChanges
- 27. Corruzione del modello di dominio POCO durante la creazione di classi di entità LINQ?
- 28. Modello View Controller vs Entità di controllo confine
- 29. ACE vs Boost vs Poco vs wxWidgets
- 30. JPA con JTA: persist entità e unire entità figlio cascata
Apprezzo che questa domanda sia stata posta qualche tempo fa ora, ma sono curioso di sapere cosa avete deciso in definitiva la situazione POCO vs STE? –