problemas con la cache de Linqtosql

24/09/2008 - 13:22 por [Juanjo] | Informe spam
hola gente:

Tengo el siguiente problema, estoy seguro de que es una tonteria, pero
no doy.

tengo una aplicacion que accede a una base de datos SQL server con LINQ.

Cuando realizo esto:
1. Ejecuto 2 veces la misma aplicacion.
2. Accedo al mismo registro de la misma base de datos desde las dos
ejecuciones
3. Desde una ejecucion modifico algun dato
4. Desde la otra ejecucion vuelvo a recuperar el mismo registro
5. Esta ultima ejecucion no "ve" los cambios efectuados.

Alguien sabe como limpiar la cache?

Muchas gracias

Preguntas similare

Leer las respuestas

#6 Jesús López
01/10/2008 - 19:56 | Informe spam
Para no tener que leer dos veces puedes tienes dos opciones:

1) Mantener el mismo contexto en la lectura y al guardar los cambios. Es
decir:
1.1 Creas un contexto Ctx.
1.2 Mediante el contexto Ctx obtienes los datos
1.3 Muestras los datos
1.4 El usuario hace cambios sobre los objetos
1.5 Guardas los cambios usando el mismo contexto creado en 1.1

2) Anexar los objectos al contexto antes de hacer los cambios:
2.1 Creas un contexto Ctx1
2.1 Medianto Ctx1 obtienes los datos
2.2 Destruyes el contexto Ctx1
2.3 Muestras los datos
2.4 El usuario hace cambios sobre los objetos
2.5 Creas un nuevo contexto Ctx2
2.5 Anexas los objectos que han cambiado a Ctx2. (Método Attach o algo
así, no recuerdo exactamente)
2.6 Guardas los cambios usando Ctx2
2.7 Destruyes el contexto Ctx2

Saludos:

Jesús López
www.solidq.com




"[Juanjo]" escribió en el mensaje
news:%

Gracias, ya sabia que podia ejecutar una instruccion sql.

La idea que yo tenia era aprovechar un poco mas el Ling,

Cuando recoges un registro de una tabla personas, por ejemplo:

var reg = (from persona where loquesea select lomismo);
persona p=reg.First();
p["nombre"]="otro Nombre";

// Siendo ctx. el DataContext
ctx.SubmitChanges(); //creo que era esta funcion

Ya actualiza el registro en cuestion.

El problema como comento es que si haces una funcion para recuperar la
persona, solo el select, y haces otra
para el Update, tienes que ejecutar una consulta para recuperar el
registro que quieres actualizar.

No se si me he explicado bien.


"Julian" escribió en el mensaje de noticias
news:
// Siendo ctx. el DataContext
// el parametro query será la consulta que actualice "UPDATE . WHERE

// parameters = los parametros que tu deses para la consulta.
ctx..ExecuteQuery<T>(string query, params object[] parameters)

"[Juanjo]" escribió en el mensaje
news:
Gracias octavio:

El problema no es solo con un registro en concreto, creo que es mas
porque usaba un objeto DataContext para toda la aplicacion,todas las
consultas, sorprendentemente,
si para cada funcion creo un objeto, si que me coge los cambios.

Hay una cosa que no me gusta mucho del LinqtoSQL y no se si por mi
desconocimiento, te cuento. Quiero actualizar un registro de la base de
datos vale?
Mi forma de trabajar es aislar el acceso a la base de datos, por lo que
bueno, mas o menos:
1. Recojo los datos (Select).
2. Muestro los datos.
3. Actualizo los datos.

Antes de usar Linq, para actualizar directamente llamaba a una funcion
que ejecutaba el "update", pero con Linq, tengo que hacer una consulta
previa para traer el registro que quiero actualizar, porque no puedes
hacer como antes "update. where clave=loquesea", y lo que no me
gusta es eso precisamente, el tener que hacer un select antes del
update.

Hay alguna otra forma de hacerlo?

Muchas gracias.










Respuesta Responder a este mensaje
#7 Jesús López
01/10/2008 - 20:05 | Informe spam
Alfredo:

LINQ no está tan mal hecho como dices. No es perfecto, desde luego.

Da la impresión de que sólo como lo haces tú está bien hecho. Creo que
deberías mostrar más respeto al trabajo de los demás. No haces más que
ponerle faltas a todo, pero poco enseñas a hacer las cosas bien (o como
piensas que deben hacerse).


"Alfredo Novoa" escribió en el mensaje
news:13g6rmn3263gh$.114xrstlgi1q3$

Hola Juanjo,

El Tue, 30 Sep 2008 13:11:04 +0200, [Juanjo] escribió:

El problema como comento es que si haces una funcion para recuperar la
persona, solo el select, y haces otra
para el Update, tienes que ejecutar una consulta para recuperar el
registro
que quieres actualizar.

No se si me he explicado bien.



Si, pero yo creo que si tienes que actualizar datos es mejor no usar Linq.
Está demasiado mal hecho.


Saludos
Respuesta Responder a este mensaje
#8 Jesús López
01/10/2008 - 20:05 | Informe spam
Alfredo:

LINQ no está tan mal hecho como dices. No es perfecto, desde luego.

Da la impresión de que sólo como lo haces tú está bien hecho. Creo que
deberías mostrar más respeto al trabajo de los demás. No haces más que
ponerle faltas a todo, pero poco enseñas a hacer las cosas bien (o como
piensas que deben hacerse).


"Alfredo Novoa" escribió en el mensaje
news:13g6rmn3263gh$.114xrstlgi1q3$

Hola Juanjo,

El Tue, 30 Sep 2008 13:11:04 +0200, [Juanjo] escribió:

El problema como comento es que si haces una funcion para recuperar la
persona, solo el select, y haces otra
para el Update, tienes que ejecutar una consulta para recuperar el
registro
que quieres actualizar.

No se si me he explicado bien.



Si, pero yo creo que si tienes que actualizar datos es mejor no usar Linq.
Está demasiado mal hecho.


Saludos
Respuesta Responder a este mensaje
#9 Jesús López
01/10/2008 - 20:21 | Informe spam
Por cierto, yo también tengo críticas para LINQ to SQL en cuanto a las
actualizaciones.

LINQ to SQL parece promover la idea de que para actualizar un conjunto de
entidades hay que hacer lo siguiente:
1) Primero leeer todas las entidades a actualizar
2) Modificar todas las entidades una a una
3) Salvar los cambios. Lo cual provoca un update por cada una de las
entidades afectadas.

Esto va totalmente en contra de la filosofía de las bases de datos
relacionales en las que la idea es "macroscópica", osea orientada de
conjuntos de filas en vez de "microscópica", o sea haciendo un procesamiento
fila a fila.

1) No es necesario leer un conjunto de filas para poderlas actualizar
2) En vez de modificar las filas una a una se pueden modificar todas de
golpe.


Sin embargo es posible hacer esto último en LINQ to SQL, ya que LINQ to
SQLpermite ejecutar directamente sentencias SQL.









"Jesús López" escribió en el
mensaje news:Oq7ZCB$
Alfredo:

LINQ no está tan mal hecho como dices. No es perfecto, desde luego.

Da la impresión de que sólo como lo haces tú está bien hecho. Creo que
deberías mostrar más respeto al trabajo de los demás. No haces más que
ponerle faltas a todo, pero poco enseñas a hacer las cosas bien (o como
piensas que deben hacerse).


"Alfredo Novoa" escribió en el mensaje
news:13g6rmn3263gh$.114xrstlgi1q3$

Hola Juanjo,

El Tue, 30 Sep 2008 13:11:04 +0200, [Juanjo] escribió:

El problema como comento es que si haces una funcion para recuperar la
persona, solo el select, y haces otra
para el Update, tienes que ejecutar una consulta para recuperar el
registro
que quieres actualizar.

No se si me he explicado bien.



Si, pero yo creo que si tienes que actualizar datos es mejor no usar
Linq.
Está demasiado mal hecho.


Saludos






Respuesta Responder a este mensaje
#10 Octavio Hernandez
01/10/2008 - 21:35 | Informe spam
Jesús,

Una respuesta muy concisa y completa!
Efectivamente, el método del contexto que mencionas es Attach(). Un buen
post sobre el método es éste:

http://blogs.msdn.com/dinesh.kulkar...ached.aspx

Slds - Octavio



"Jesús López" wrote in message
news:uiZ7Z8%
Para no tener que leer dos veces puedes tienes dos opciones:

1) Mantener el mismo contexto en la lectura y al guardar los cambios. Es
decir:
1.1 Creas un contexto Ctx.
1.2 Mediante el contexto Ctx obtienes los datos
1.3 Muestras los datos
1.4 El usuario hace cambios sobre los objetos
1.5 Guardas los cambios usando el mismo contexto creado en 1.1

2) Anexar los objectos al contexto antes de hacer los cambios:
2.1 Creas un contexto Ctx1
2.1 Medianto Ctx1 obtienes los datos
2.2 Destruyes el contexto Ctx1
2.3 Muestras los datos
2.4 El usuario hace cambios sobre los objetos
2.5 Creas un nuevo contexto Ctx2
2.5 Anexas los objectos que han cambiado a Ctx2. (Método Attach o algo
así, no recuerdo exactamente)
2.6 Guardas los cambios usando Ctx2
2.7 Destruyes el contexto Ctx2

Saludos:

Jesús López
www.solidq.com




"[Juanjo]" escribió en el mensaje
news:%

Gracias, ya sabia que podia ejecutar una instruccion sql.

La idea que yo tenia era aprovechar un poco mas el Ling,

Cuando recoges un registro de una tabla personas, por ejemplo:

var reg = (from persona where loquesea select lomismo);
persona p=reg.First();
p["nombre"]="otro Nombre";

// Siendo ctx. el DataContext
ctx.SubmitChanges(); //creo que era esta funcion

Ya actualiza el registro en cuestion.

El problema como comento es que si haces una funcion para recuperar la
persona, solo el select, y haces otra
para el Update, tienes que ejecutar una consulta para recuperar el
registro que quieres actualizar.

No se si me he explicado bien.


"Julian" escribió en el mensaje de noticias
news:
// Siendo ctx. el DataContext
// el parametro query será la consulta que actualice "UPDATE . WHERE

// parameters = los parametros que tu deses para la consulta.
ctx..ExecuteQuery<T>(string query, params object[] parameters)

"[Juanjo]" escribió en el mensaje
news:
Gracias octavio:

El problema no es solo con un registro en concreto, creo que es mas
porque usaba un objeto DataContext para toda la aplicacion,todas las
consultas, sorprendentemente,
si para cada funcion creo un objeto, si que me coge los cambios.

Hay una cosa que no me gusta mucho del LinqtoSQL y no se si por mi
desconocimiento, te cuento. Quiero actualizar un registro de la base de
datos vale?
Mi forma de trabajar es aislar el acceso a la base de datos, por lo que
bueno, mas o menos:
1. Recojo los datos (Select).
2. Muestro los datos.
3. Actualizo los datos.

Antes de usar Linq, para actualizar directamente llamaba a una funcion
que ejecutaba el "update", pero con Linq, tengo que hacer una consulta
previa para traer el registro que quiero actualizar, porque no puedes
hacer como antes "update. where clave=loquesea", y lo que no me
gusta es eso precisamente, el tener que hacer un select antes del
update.

Hay alguna otra forma de hacerlo?

Muchas gracias.














Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida