none
Ayuda con Create ASP.NET MVC RRS feed

  • Pregunta

  • Buenas tardes

    Estoy teniendo un problema que no le puedo encontrar la solución , espero ustedes me puedan ayudar. Es cuando quiero agregar un dato a la base de datos mediante Entity Framework.

    Basicamente el codigo de mi modelo es el siguiente:

     [Table("PAR_EMPLEADO")]
        public class Empleado
        {
            [Key]
            [Display(Name = "Legajo")]
            public int Legajo { get; set; }

            [Required]
            [EmailAddress]
            [Display(Name = "Email")]
            public string Email { get; set; }

            [Display(Name = "Nombre")]
            [StringLength(50)]
            public string Nombre { get; set; }

            [Display(Name = "Cod. Vendedor")]
            [StringLength(4)]
            public string CodVen { get; set; }

            [ForeignKey("Sucursal")]
            [Display(Name = "Sucursal")]
            [StringLength(3)]
            public string CodSuc { get; set; }

            [ForeignKey("FuncionPri")]
            [Display(Name = "Función")]
            public int FuncionP { get; set; }

            [ForeignKey("FuncionSec")]
            [Display(Name = "Función Secundaria")]
            public int? FuncionS { get; set; }

            [Display(Name = "Estado")]
            public bool Inactivo { get; set; }

            public virtual Sucursal Sucursal { get; set; }
            public virtual FuncionEmple FuncionPri { get; set; }
            public virtual FuncionEmple FuncionSec { get; set; }
        }

    El codigo de mi controlador es el siguiente: 

                   

     [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Create(Empleado empleado)
            {
                if (ModelState.IsValid)
                {

                    db.Empleados.Add(empleado);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }

                ViewBag.CodSuc = new SelectList(db.Sucursales, "CodSuc", "dessuc", empleado.CodSuc);
                ViewBag.FuncionP = new SelectList(db.Funciones, "id", "descripcion", empleado.FuncionP);
                ViewBag.FuncionS = new SelectList(db.Funciones, "id", "descripcion", empleado.FuncionS);
                return View(empleado);
            }

    El error me lo esta tirando en db.savechanges()

    y lo que me dice es lo siguiente:

    SqlException: No se puede insertar el valor NULL en la columna 'legajo', tabla 'PergaminoPrueba.dbo.PAR_EMPLEADO'. La columna no admite valores NULL. Error de INSERT.
    Se terminó la instrucción.

    Ya se que me van a decir : Le estas pasando un valor nulo a un atributo que no permite nulos en la base de datos, pero no es asi. Le estoy pasando valor y me lo esta tomando el valor por lo que veo en el debug

    

    Y Legajo es clave primaria de mi entidad, por lo que no puedo establecerla en nulo en la base de datos.

    Pueden guiarme a resolver este problema raro, para mi esta por el lado de mi entidad. El codigo y anotaciones de mi entidad son los siguientes:

        [Table("PAR_EMPLEADO")]
        public class Empleado
        {
            [Key]
            [Display(Name = "Legajo")]
            public int Legajo { get; set; }

            [Required]
            [EmailAddress]
            [Display(Name = "Email")]
            public string Email { get; set; }

            [Display(Name = "Nombre")]
            [StringLength(50)]
            public string Nombre { get; set; }

            [Display(Name = "Cod. Vendedor")]
            [StringLength(4)]
            public string CodVen { get; set; }

            [ForeignKey("Sucursal")]
            [Display(Name = "Sucursal")]
            [StringLength(3)]
            public string CodSuc { get; set; }

            [ForeignKey("FuncionPri")]
            [Display(Name = "Función")]
            public int FuncionP { get; set; }

            [ForeignKey("FuncionSec")]
            [Display(Name = "Función Secundaria")]
            public int? FuncionS { get; set; }

            [Display(Name = "Estado")]
            public bool Inactivo { get; set; }

            public virtual Sucursal Sucursal { get; set; }
            public virtual FuncionEmple FuncionPri { get; set; }
            public virtual FuncionEmple FuncionSec { get; set; }
        }
    }

    HELP ME!!! GRACIAS!!!

    miércoles, 19 de septiembre de 2018 22:02

Respuestas

  • Asi a simple vista tiene pinta de ser correcto todo tal como lo tienes, y no debería de estar dando el error que da.

    Para tratar de arrojar algo de luz sobre el problema, te sugiero usar el SQL Profiler y capturar las sentencias que el programa envía al servidor. A veces viendo qué es lo que le llega al SQL Server te haces una idea de cual puede ser el problema.

    Por ejemplo, si te das cuenta de que le llegan dos sentencias de inserción y una tiene un NULL mientras que la otra tiene correctamente el 1234, eso significa que en algún otro sitio del programa antes de llegar a la parte que hace el SaveChanges se ha hecho otro "Add" que tenía la clave vacía. No digo que te esté pasando precisamente esto, simplemente lo pongo como ejemplo de algo que si ocurriese se podría descubrir examinando la traza del Profiler, de ahí mi consejo de usar el Profiler a ver si revela algún dato relevante para acotar el problema.

    jueves, 20 de septiembre de 2018 13:16
  • Asi a simple vista tiene pinta de ser correcto todo tal como lo tienes, y no debería de estar dando el error que da.

    Para tratar de arrojar algo de luz sobre el problema, te sugiero usar el SQL Profiler y capturar las sentencias que el programa envía al servidor. A veces viendo qué es lo que le llega al SQL Server te haces una idea de cual puede ser el problema.

    Por ejemplo, si te das cuenta de que le llegan dos sentencias de inserción y una tiene un NULL mientras que la otra tiene correctamente el 1234, eso significa que en algún otro sitio del programa antes de llegar a la parte que hace el SaveChanges se ha hecho otro "Add" que tenía la clave vacía. No digo que te esté pasando precisamente esto, simplemente lo pongo como ejemplo de algo que si ocurriese se podría descubrir examinando la traza del Profiler, de ahí mi consejo de usar el Profiler a ver si revela algún dato relevante para acotar el problema.

    Muchas gracias por tu respuesta.

    Ya encontre el error. Lo que faltaba era agregar lo siguiente en el modelo:

    [DatabaseGenerated(DatabaseGeneratedOption.None)]

    Gracias!

    viernes, 21 de septiembre de 2018 21:05

Todas las respuestas

  • Asi a simple vista tiene pinta de ser correcto todo tal como lo tienes, y no debería de estar dando el error que da.

    Para tratar de arrojar algo de luz sobre el problema, te sugiero usar el SQL Profiler y capturar las sentencias que el programa envía al servidor. A veces viendo qué es lo que le llega al SQL Server te haces una idea de cual puede ser el problema.

    Por ejemplo, si te das cuenta de que le llegan dos sentencias de inserción y una tiene un NULL mientras que la otra tiene correctamente el 1234, eso significa que en algún otro sitio del programa antes de llegar a la parte que hace el SaveChanges se ha hecho otro "Add" que tenía la clave vacía. No digo que te esté pasando precisamente esto, simplemente lo pongo como ejemplo de algo que si ocurriese se podría descubrir examinando la traza del Profiler, de ahí mi consejo de usar el Profiler a ver si revela algún dato relevante para acotar el problema.

    jueves, 20 de septiembre de 2018 13:16
  • Asi a simple vista tiene pinta de ser correcto todo tal como lo tienes, y no debería de estar dando el error que da.

    Para tratar de arrojar algo de luz sobre el problema, te sugiero usar el SQL Profiler y capturar las sentencias que el programa envía al servidor. A veces viendo qué es lo que le llega al SQL Server te haces una idea de cual puede ser el problema.

    Por ejemplo, si te das cuenta de que le llegan dos sentencias de inserción y una tiene un NULL mientras que la otra tiene correctamente el 1234, eso significa que en algún otro sitio del programa antes de llegar a la parte que hace el SaveChanges se ha hecho otro "Add" que tenía la clave vacía. No digo que te esté pasando precisamente esto, simplemente lo pongo como ejemplo de algo que si ocurriese se podría descubrir examinando la traza del Profiler, de ahí mi consejo de usar el Profiler a ver si revela algún dato relevante para acotar el problema.

    Muchas gracias por tu respuesta.

    Ya encontre el error. Lo que faltaba era agregar lo siguiente en el modelo:

    [DatabaseGenerated(DatabaseGeneratedOption.None)]

    Gracias!

    viernes, 21 de septiembre de 2018 21:05