webForumDet fria alternativet

Fel värde vid fel tillfälle..

.NET

3 svar · 227 visningar · startad av Walker

Medlem sedan okt. 2002188 inlägg
Frågan#1

Hej

Sorry för den taskiga rubriken men kom inte på något annat.

Jag har fått ett litet problem med lite objekt. Jag har ett object som i detta fallet är ett objekt av typen country. När jag skapar ett sådant så har propertiet name värdet England, bara för att testa.

Jag sätter idnummert på det rätta objektet, i detta fallet idnummer 23. Sen när man försöker komma åt name egenskapen så skall objektet laddas från databasen, eftersom jag inte laddat det. Detta sker genom load metoden Load(). Här har name värdet england, innan jag skickar in det till Load(BO.BoBase). Eftersom jag redan laddat detta objektet från databasen så kommer det att finnas i datacachen som jag kommer åt mha find. I denna så anger jag att det aktuella objektet skall vara samma som det laddade. (obj = (BO.BoBase)this._dataCache[obj.Id]; ). Om jag läser av värdet i obj så har det värdet, sweden, precis som det skall ha. När jag sen trillar ut ur Find metoden så är värdet fel igen, dvs det är england igen. Bara för att testa så har jag satt dit denna raden, obj = (BO.BoBase)manager.DataCache[obj.Id];

Men när jag trillar ut ur Load(BO.BoBase obj) så är ändå värdet på egenskapen = england och således så blir detta resultatet när load avslutas att objektet har fel värde.

Någon som ser något fel?

public void Load()
{
	if ((this._state == LoadState.NotLoaded) && (this._id != 0))
	{		
		this._state = LoadState.Loading;
		DataManager.Instance.Load(this);	
		this._state = LoadState.Loaded;
	}
}

public void Load(BO.BoBase obj)
{
	//hämta anslutingen och öppna den samt starta en transaction!
	IDataManager manager = _managers[obj.GetType()];
	if (manager.Find(obj) == false)
	{
		//Code to load the object from the database.
	}
	else
	{
		obj = (BO.BoBase)manager.DataCache[obj.Id];
	}
}

public bool Find(BO.BoBase obj)
{
	if (this._dataCache[obj.Id] != null)
	{
		obj = (BO.BoBase)this._dataCache[obj.Id];
		return true;
	}
	else
	{
		return false;
	}
}
Medlem sedan okt. 2002188 inlägg
#2

Hittade felet..

Medlem sedan mars 20023 561 inlägg
#3

Och som vanligt uppskattas det om man postar lösningen... ;)

Medlem sedan okt. 2002188 inlägg
#4

Hej

Jag var lite stressad innan..sorry.... Jag vet inte om jag förstår varför det inte fungerar, men jag vet vad som är fel.

Huvudfelet är att jag skickar in this mha

DataManager.Instance.Load(this);

Och sen försöker jag ändra referensen till något annat, genom obj = (BO.BoBase)manager.DataCache[obj.Id];

Nu vet jag inte om detta är hela sanningen, men det är så jag förstår det. har jag tolkat det fel så ropa till och rätta mig..

257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)