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

Preguntas similare

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.
Respuesta Responder a este mensaje
#2 Julian
15/12/2008 - 16:58 | Informe spam
Mira, yo utilizo la tecnica de MSDN Video.

// Evento Load del Formulario
private void Form1_Load(object sender, EventArgs e)
{
// Utiliza un BindingList que albergar la colecion de clientes
BindingList<Clientes> clientesBL;
LegioNetDataContext dc = new LegioNetDataContext();
IQueryable<Clientes> query;
query = from clientes in dc.Clientes select clientes;
clientesBL= QueryToBindingList(query);

/ / Utiliza un BindingSource para enlazar los datos
BindingSource bs = new BindingSource();
bs.DataSource = clientesBL;
Clientes cliente = new Clientes();
cliente.Nombre = "Nuevo Cliente";
bs.Add(cliente);
bs.EndEdit();
foreach (Clientes cli in clientesBL)
{
MessageBox.Show(cli.Nombre);
}
}
/// <summary>
/// Transforma una query de LINQ a una lista BindingList
/// </summary>
/// <typeparam name="T">Tipo de la entidad</typeparam>
/// <param name="query">Query LINQ</param>
/// <returns>Lista transformada</returns>
protected BindingList<T> QueryToBindingList<T>(IQueryable<T> query)
{
BindingList<T> result = new BindingList<T>();
foreach (T item in query)
{
result.Add(item);
}
return result;
}

"Paul" escribió en el mensaje
news:
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
Respuesta Responder a este mensaje
#3 Ramón
15/12/2008 - 17:07 | Informe spam
Ese linq da mas problemas que beneficios

"Paul" escribió en el mensaje
news:
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
Respuesta Responder a este mensaje
#4 Julian
16/12/2008 - 16:47 | Informe spam
A mi me funciona perfectamente desde mis conocimientos en el tema, ahunque
pienso que Microsoft irá mejorandolo.
De momento veo que Microsoft está poniendo en nuestras manos herramientas
estupendas.

"Ramón" escribió en el mensaje
news:
Ese linq da mas problemas que beneficios

"Paul" escribió en el mensaje
news:
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

Respuesta Responder a este mensaje
#5 Ramón
17/12/2008 - 04:50 | Informe spam
jeje,.. yo pensaba lo mismo, pero he ido viendo que eso es extremadamente
ineficiente comparado con el viejito ado.net.



"Julian" escribió en el mensaje
news:
A mi me funciona perfectamente desde mis conocimientos en el tema, ahunque
pienso que Microsoft irá mejorandolo.
De momento veo que Microsoft está poniendo en nuestras manos herramientas
estupendas.

"Ramón" escribió en el mensaje
news:
Ese linq da mas problemas que beneficios

"Paul" escribió en el mensaje
news:
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





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida