58 messaggi dal 23 agosto 2005
www.fabal.it
Buona sera a tutti ho sviluppato una web application, per la mia azienda, e ho utilizzato EF 4 disegnando prima il db, e facendo generare il codice in modo automatico. Tutto ok tranne l'esigenza che sorge ora per evirtare una duplicazione inutile di codice. Ho una classe festività che rispecchia la mia tabella delle festività, ora avrei l'esigenza di aggiungere un metodo chkFestivita a passo una data e mi ritorna un oggetto Festivita se ha recuperato la festività tramite le chiamate al modello altrimenti torna un valore null.

Il metodo da implementare di per se è banale:


        public Festivita getFesta(DateTime giornoC){

            IntegraEuEntities context = new IntegraEuEntities();
            var Lfest = from f in context.Festivita
                        where (f.anno == giornoC.Year && f.mese == giornoC.Month) ||
                            (f.anno == null && f.mese == giornoC.Month)
                        select f;

            foreach (Festivita fes in Lfest)
            {
                if (giornoC.Day == fes.giorno)
                {
                    return fes;
                }
            }
            return null;
        }


Come faccio ad inserirlo nella classe generata da EF in modo da poterlo richiamare ovunque?
Grazie, e spero di essere stato chiaro.
58 messaggi dal 23 agosto 2005
www.fabal.it
Non so se ho utilizzato la forma più elegante però leggendo questo:

http://msdn.microsoft.com/en-us/library/vstudio/bb311042.aspx

Ho creato una classe statica (lasciandola nello stesso namespace originale visto che è utile solo a questo contesto applicativo:


public static class IntegraEuModelExtension
    {

        public static Festivita getFesta(this DateTime giornoC)
        {   IntegraEuEntities context = new IntegraEuEntities();
            var Lfest = from f in context.Festivita
                        where (f.anno == giornoC.Year && f.mese == giornoC.Month) ||
                            (f.anno == null && f.mese == giornoC.Month)
                        select f;

            foreach (Festivita fes in Lfest)
            {
                if (giornoC.Day == fes.giorno)
                {
                    return fes;
                }
            }
            return null;
        }
    }


l'effetto che ho ottenuto è la possibilità di richiamare il metodo getFesta ogni volta che ho un tipo datetime, tutto sommato non è errato ma ovviamente ha utilità solo per il mio progetto.
Spero di essere stato utile.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
le classi di entità generate dal designer sono tutte dichiarate come partial. Questo significa che hai la possibilità di integrarle con altre proprietà e metodi definiti da te. Devi semplicemente creare un nuovo file .cs e ridefinire la stessa classe, con il solito attributo partial. All'atto della compilazione, i due (o più) file sorgenti verranno messi insieme a formare un unico tipo. Leggi qui:
http://msdn.microsoft.com/it-it/library/wa80x488.aspx

Usare gli extension methods non è sbagliato di per sé, ma è una soluzione inferiore perché da lì non puoi accedere agli eventuali membri privati della classe. Saresti costretto a renderli pubblici, violando il principio dell'incapsulamento.

ciao,
Moreno
Modificato da BrightSoul il 03 maggio 2014 14.42 -

Enjoy learning and just keep making
58 messaggi dal 23 agosto 2005
www.fabal.it
ok grazie, ovviamente modificherò quanto scritto avendo poi un modello base creato da EF e un modello esteso composto da tutti i metodi accessori che verranno richiamati dagli pseudo controller che sono legati ad ogni pagina aspx.
Modificato da fabal il 04 maggio 2014 15.00 -

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.