17 messaggi dal 08 giugno 2010
tramite ADO.Net DbContext Generator ho generato le classi poco del mio modello. ora ho bisogno di applicare a determinati attributi l'etichetta [XmlIgnore()].... ovviamente non posso metterli sulla classe generata perchè verrebbero sovrascritti ad ogni salvataggio del modello, come posso fare??? Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
aspiranteMVC ha scritto:
ho bisogno di applicare a determinati attributi l'etichetta [XmlIgnore()]


Capisco il problema, puoi usare uno di questi due metodi, ma non senza controindicazioni.

- Puoi modificare il file .tt che ti genera le classi. Qui la difficoltà è che non si tratta semplicemente di aggiungere una linea di codice, se vuoi che XmlIgnore compaia solo su determinate proprietà. Devi capire qual è la logica comune secondo la quale l'attributo XmlIgnore deve esserci o meno, e trasporla in sintassi T4. Io non saprei dove mettere le mani, perciò ti indirizzo verso il blog di Oleg Sych. Forse un editor T4 può aiutarti

- Oppure, anziché aggiungere l'attributo XmlIgnore, potresti cambiare l'accessor della proprietà da public a internal (lo fai dal designer). Se la proprietà non è public, infatti, non verrà serializzata. Ricorda che, così facendo, potrai usare qulle proprietà internal solo dall'interno della tua applicazione/assembly.

Sarebbe molto bello se invece potessimo contare sulle partial properties; avremmo un file autogenerato dal T4 in cui c'è l'implementazione della proprietà, e in un altro, creato da noi, potremmo definire di nuovo la stessa proprietà, ma al solo scopo di annotarla con attributi. Forse in una futura versione del framework...

Enjoy learning and just keep making
17 messaggi dal 08 giugno 2010
la prima soluzione mi spaventa un po'...

la secondo non va bene perchè nella mia applicazione ho bisogno di avere quelle proprietà pubbliche.

E' nella creazione di un web service che ho bisogno di serializzare solo l'oggetto principale.
17 messaggi dal 08 giugno 2010
posso scrivere del codice nella classe generata che non viene sovrascritto ?? ricordo di aver letto qualcosa in merito....
11.886 messaggi dal 09 febbraio 2002
Contributi
aspiranteMVC ha scritto:
posso scrivere del codice nella classe generata che non viene sovrascritto ?? ricordo di aver letto qualcosa in merito....


Mi spiace, non sono a conoscenza di un sistema simile. Le classi del T4 vengono generate partial proprio perchè così hai la possibilità di aggiungere, in un altro file, altri tuoi metodi e attributi. Questa è la soluzione al problema dei file che vengono sovrascritti dal T4. Sfortunatamente non esistono partial properties quindi nel tuo caso il problema persiste.


la prima soluzione mi spaventa un po'...
la secondo non va bene


Ok, dato che devi esporre queste strutture in un webservice, allora dovresti crearti dei DTO, cioè classi fac-simile a quelle del tuo entity model che però contengano solo le proprietà effettivamente utili a chi consuma il tuo webservice.

Leggi questi due articoli di Stefano Mostarda, qui e qui.

Introducendo i DTO aggiungi complessità, è vero, ma ti sbarazzi di questo fastidioso problema e al contempo sei libero di dare la forma che vuoi ai dati che esponi col webservice. Non sei più costretto ad usare lo stesso identico model della tua applicazione, ecco.

ciao,
Modificato da BrightSoul il 15 luglio 2011 19.48 -

Enjoy learning and just keep making
17 messaggi dal 08 giugno 2010
avevo pensato a questa soluzione ma speravo ne esistesse un'altra ;-) ... ti ringrazio ... e vado con i dto...

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.