[LINQTOSQL] Impossibile usare il lazyload per un datacontext puro!!
dops non è online. Ultima attività: 13/08/2008 21.56.33dops
Inserito il: 04 luglio 2008 00.08
787 messaggi dal 29 apr 2002 Istalla Microsoft Silverlight!
Ciao mi sono imbattuto in una cosa + grande di me :D
sarò veloce: ho le mie classi mappate (a mano), devo creare un record, bene un bel metodo statico:

public static UserProfile CreateUserProfile(UserProfile _userProfile)
{
try
{
DataContext context = new DataContext(stringa di connessione recuperata da un file di configurazione);
context.GetTable<UserProfile>().InsertOnSubmit(_userProfile);
context.SubmitChanges(ConflictMode.FailOnFirstConflict);
return _userProfile;
}
catch (Exception ex)
{
throw ex;
}
}

niente di + semplice (lo dico ora che stò incominciando a capire come funzione linq to sql)

Poi mi sono detto: "che palle però istanziare sempre la stessa classe DataContext scrivendo ogni volta il codice necessario per recuperare la stringa di connessione.." quindi mi sono creato una classe helper:


public class DataContextHelper
{
private static DataContext context = null;
public static DataContext Context
{
get
{
try
{
if (context == null)
{
context = new DataContext(GetConnectionString);
return context;
}

return context;
}
catch
{
throw new NullReferenceException("Cannot retrieve the DataContext");
}
}

}
}


ed il metodo di prima diventa:

public static UserProfile CreateUserProfile(UserProfile _userProfile)
{
try
{
DataContextHelper.Context.GetTable<UserProfile>().InsertOnSubmit(_userProfile);
DataContextHelper.Context.SubmitChanges(ConflictMode.FailOnFirstConflict);
return _userProfile;
}
catch (Exception ex)
{
throw ex;
}
}



L'intenzione era semplicemente quella di non scrivere sempre la stessa cosa.. ma scrivendo questa proprietà Context, non sò come mi è venuto, ho implementato anche il pattern lazy load, non l'avessi mai fatto!!
Cioè, mi sono detto: vabbè mettiamo che recupero un record, subito dopo devo modificarlo per poi aggiornarlo quindi:

UserProfile profile = UserProfileData.RetrieveUserProfileByUserKey(2);
profile.LastName = "AOOOOOOOOOOOOOOOOOOOOOOOOOOOO";
UserProfileData.UpdateUserProfile(profile);

incominciano i guai: con il metodo: "UserProfileData.RetrieveUserProfileByUserKey(2);" recupero il record (o istanza chiamatela come volete) che mi serve, ma allo stesso tempo stò mettendo questa istanza nel DataContext in modo del tutto trasparente, quindi modifico il record e chiamo un metodo per aggiornare: "UserProfileData.UpdateUserProfile(profile);"
ecco che mi si presenta il problema per cui stò scrivendo questo post, ho infatti implementato il lazy load su DataContexHelper.Context e quando cerco di fare l'aggiornamento dell'istanza, questa è già presente nel DataContext e in nessun modo riesco ad aggiornarla o sostituirla.. o meglio.. ci sono anche riuscito annullando il DataContext che la contiene (DataContextHelper.Context = null) ed attaccando (Attach) o inserendo (InsertOnSubmit) in una nuova istanza di DataContextHelper.Context, ma .. ecco il framework che mi sgrida.. dice infatti che questa istanza che stò per aggiornare contiene una associazione con un altra classe, e tale associazione non verrà mantenuta..
Insomma.. senza scendere troppo nel dettaglio, sembra che stia prendendo il sopravvento quel concetto che ho letto in vari articoli, cioè un datacontex per ogni operazione :(
conferme, correzioni, smentite.. accetto tutto :D

Microsoft Most Valuable Professional
RE: [LINQTOSQL] Impossibile usare il lazyload per un datacontext puro!!
nostromo non è online. Ultima attività: 21/08/2008 0.48.59nostromo
Inserito il: 04 luglio 2008 01.31
contributi / Top Poster / Community manager / www.soluzioni4d.it / Blog / 11887 messaggi dal 18 feb 2004 Istalla Microsoft Silverlight!
mmm prima non ci avevo fatto caso, ma hai definito il DataContext come statico, diciamo non il massimo

comunque allora non so come hai implementato il LazyLoad, ma Linq To Sql già lo supporta, ad esempio tramite EntityRef.

ed è possibile "pilotarlo" tramite LoadOption

ciao marco

Where we're going, we don't need roads!
http://nostromo.spaces.live.com/default.aspx
Microsoft Most Valuable Professional
Re: [LINQTOSQL] Impossibile usare il lazyload per un datacontext puro!!
SM15455 non è online. Ultima attività: 18/08/2008 14.27.40SM15455
Inserito il: 04 luglio 2008 22.19
contributi / Top Poster / Community manager / Blog / 2541 messaggi dal 06 set 2002 Istalla Microsoft Silverlight!
Ciao,

staticizzare il datacontext è il male fatto persona.

Rischi di:
Causare errori,
Cariare dati errati,
aggiornare dati sbagliati,

HTH

Nothing can be born from hartred

Stefano (SM15455) Mostarda
http://blogs.aspitalia.com/SM15455
Rome Italy

Vai a:
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.


fabrica - 1242 pt
vladimiro - 1070 pt
PeppeDotNet - 590 pt

Ultimi vincitori: PeppeDotNet, fabrica, vladimiro

Iscriviti anche tu e raccogli punti. Questo mese in palio VS 2008 + Windows Server 2008, ReShaper e 1 ebook!



COMMUNITY
ULTIMI MESSAGGI


IN EVIDENZA
MISC
Powered by .db Forums