Que hago mal con el InsertOnSubmit?

15/12/2008 - 11:39 por Paul | Informe spam
Hola,
he creado un datacontext de una base de datos Sql Server, donde entre
otras tengo una tabla llamada "Cliente".

En un trozo de código quiero agragar un cliente nuevo, pero sin
actualizar la BBDD SqlServer, y para ello utilizo la clase Cliente que
me crea de forma automatica el DataContex, el codigo es el siguiente:

Cliente cli= new Cliente();
cli.Nombre="Nombre Completo";
cli.Direccion="Dir";
cli.Poblacion="Pobl";
cli.Provincia="Prov";
cli.CP="CP";
cli.Pais="Pais";
cli.NIF="NIF";
cli.Descr="Descr";

dc.Clientes.InsertOnSubmit(cli);

Si ahora quiero recorrer la tabla, hago:
foreach (Cliente c in dc.Clientes)
{
string aa=c.Nombre;
}
Pero no entra ninguna vez en el foreach.

En cambio si envio los cambios a la BBDD con:
dc.SubmitChanges();
Luego si que me recoore la tabla con
foreach (Cliente c in dc.Clientes)
{
string aa=c.Nombre;
}

Pero como recorrer la tabla con los nuevos cambios sin enviar los
cambios a la BBDD?

Gracias
 

Leer las respuestas

#1 SoftJaén
15/12/2008 - 14:43 | Informe spam
"Paul" escribió:

he creado un datacontext de una base de datos Sql Server, donde
entre otras tengo una tabla llamada "Cliente".

En un trozo de código quiero agragar un cliente nuevo, pero sin
actualizar la BBDD SqlServer, y para ello utilizo la clase Cliente que
me crea de forma automatica el DataContex

dc.Clientes.InsertOnSubmit(cli);

Pero no entra ninguna vez en el foreach.

En cambio si envio los cambios a la BBDD con:
dc.SubmitChanges();

Luego si que me recorre la tabla

Pero como recorrer la tabla con los nuevos cambios sin enviar los
cambios a la BBDD?



Para trabajar de esa manera, mejor será que continues utilizando un objeto
DataTable, y cuando desees enviar los cambios a la base de datos, llama al
método «Update» de un objeto DataAdapter adecuado.

Pero salvo que yo esté equivocado, tengo entendido que el método
«InsertOnSubmit» añade al objeto Table<TEntity> una nueva entidad (un nuevo
Cliente en tu caso), pero lo deja en un estado «pendiente de insertar».
Tienes que llamar al método «SubmitChanges» del objeto DataContext para
enviar las modificaciones a la base de datos, tal y como tu mismo has tenido
la oportunidad de comprobar.

Antes de la aparición de LINQ, los usuarios se "quejaban" que los cambios
producidos en un objeto DataTable no se reflejaban automáticamente en la
base de datos. Ahora, lo mismo resulta que queremos que aparezcan en el
objeto Table<TEntity> sin que se guarden previamente en la base de datos.
:-))

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.

Preguntas similares