none
Problema al insertar registro en gridView RRS feed

  • Pregunta

  • Hola a todos!

    Tengo un problema al insertar un registro en un gridView con EF, a ver si me podéis echar una mano.

    Tengo una base de datos con una tabla "Mantenimientos" cuyo campo clave es "ID" y lo tengo como Identity.

    El método que uso para insertar el registro es el siguiente:

                

    protected void anadir()
    {
                Mantenimientos m = new Mantenimientos();

                m.Fecha = Convert.ToDateTime(txtFecha.Text);
                m.Estado = Convert.ToInt32(txtEstado.Text);
                m.FechaInicio = Convert.ToDateTime(txtFechaInicio.Text);
                m.Duracion = Convert.ToDateTime(txtDuracion.Text);
                m.FechaFin = Convert.ToDateTime(txtFechaFin.Text);
                m.Descripcion = txtDescripcion.Text;

                entidad.AddToMantenimientos(m);
                entidad.SaveChanges();
    }

    El problema es que cuando llega a la línea entidad.AddToMantenimientos(m); me dice "Referencia a objeto no establecida como instancia de un objeto". 

    Hago una Quick Watch, y veo que el ID tiene el valor 0. Los demás datos los recoge perfectamente del formulario.

    El código para añadir el registro, lo he sacado de la siguiente página:

    http://www.cjorellana.net/2011/05/insertar-actulizar-eliminar-con-entity.html

    Alguien me puede decir qué estoy haciendo mal??

    Un saludo a todos y gracias!

    jueves, 7 de febrero de 2013 9:54

Respuestas

  • Pues ya lo tengo!

    Lo he repetido todo de nuevo y resulta que cuando declaraba la entidad, no hacía el new de la entidad. 

    Quedaría como sigue:

    public partial class Informe : System.Web.UI.Page
        {
            TheaEntities entidad = new TheaEntities();

    .

    .

    .

     protected void cmdAnadir_Click(object sender, EventArgs e)
            {
                anadir();
            }

            protected void anadir()
            {
                Mantenimientos m = new Mantenimientos();

                m.Fecha = Convert.ToDateTime(txtFecha.Text);
                m.Estado = Convert.ToInt32(txtEstado.Text);
                m.FechaInicio = Convert.ToDateTime(txtFechaInicio.Text);
                m.Duracion = Convert.ToDateTime(txtDuracion.Text);
                m.FechaFin = Convert.ToDateTime(txtFechaFin.Text);
                m.Descripcion = txtDescripcion.Text;

                entidad.AddToMantenimientos(m);
                entidad.SaveChanges();
            }

    Un saludo y gracias por la ayuda como siempre Leandro!!

    • Marcado como respuesta CrepuX jueves, 7 de febrero de 2013 14:53
    • Desmarcado como respuesta CrepuX lunes, 11 de febrero de 2013 7:55
    • Marcado como respuesta CrepuX lunes, 11 de febrero de 2013 7:56
    jueves, 7 de febrero de 2013 14:52

Todas las respuestas

  • hola

    la variable "entidad" donde la defines ?

    no sera que esta esta en null, donde instancias el context, o sea "entidad"

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 7 de febrero de 2013 12:59
  • Hola Leandro,

    Muchas gracias por responder. 

    La defino a nivel de clase:

      public partial class Informes : System.Web.UI.Page
        {
           
           private TheaEntities entidad;

    He estado depurando, y si: está a null. Qué tendría que hacer para llenarla??

    En el ejemplo que estoy siguiendo, pone que tengo que agregar el using del Model, pero no me lo reconoce. Si le pongo using TheaModel, que es el nombre que le pone cuando agregas las tablas, me lo marca como error.

    Perdona las preguntas, pero con el EF soy novato.

    Un saludo y muchas gracias!




    • Editado CrepuX jueves, 7 de febrero de 2013 14:32
    jueves, 7 de febrero de 2013 14:05
  • Pues ya lo tengo!

    Lo he repetido todo de nuevo y resulta que cuando declaraba la entidad, no hacía el new de la entidad. 

    Quedaría como sigue:

    public partial class Informe : System.Web.UI.Page
        {
            TheaEntities entidad = new TheaEntities();

    .

    .

    .

     protected void cmdAnadir_Click(object sender, EventArgs e)
            {
                anadir();
            }

            protected void anadir()
            {
                Mantenimientos m = new Mantenimientos();

                m.Fecha = Convert.ToDateTime(txtFecha.Text);
                m.Estado = Convert.ToInt32(txtEstado.Text);
                m.FechaInicio = Convert.ToDateTime(txtFechaInicio.Text);
                m.Duracion = Convert.ToDateTime(txtDuracion.Text);
                m.FechaFin = Convert.ToDateTime(txtFechaFin.Text);
                m.Descripcion = txtDescripcion.Text;

                entidad.AddToMantenimientos(m);
                entidad.SaveChanges();
            }

    Un saludo y gracias por la ayuda como siempre Leandro!!

    • Marcado como respuesta CrepuX jueves, 7 de febrero de 2013 14:53
    • Desmarcado como respuesta CrepuX lunes, 11 de febrero de 2013 7:55
    • Marcado como respuesta CrepuX lunes, 11 de febrero de 2013 7:56
    jueves, 7 de febrero de 2013 14:52
  • no recomiendo que uses de esa forma el context, sino que lo hagas

    protected void anadir()
     {

                using(TheaEntities entidad = new TheaEntities()){

                Mantenimientos m = new Mantenimientos();

                m.Fecha = Convert.ToDateTime(txtFecha.Text);
                m.Estado = Convert.ToInt32(txtEstado.Text);
                m.FechaInicio = Convert.ToDateTime(txtFechaInicio.Text);
                m.Duracion = Convert.ToDateTime(txtDuracion.Text);
                m.FechaFin = Convert.ToDateTime(txtFechaFin.Text);
                m.Descripcion = txtDescripcion.Text;

                entidad.AddToMantenimientos(m);
                entidad.SaveChanges();

               }

    }

    o sea usa el using para definir el ambito del context y no de forma global

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 7 de febrero de 2013 16:51
  • Hola Leandro!

    Lo acabo de probar como tú dices y funciona perfectamente. 

    Muchas gracias por tu ayuda!!

    Un saludo.

    lunes, 11 de febrero de 2013 7:55