ASP.NET - Campo Booleano almacena Null en la Tabla y recibe un True en el Modelo

 
Vista:
Imágen de perfil de Franklyn
Val: 3
Ha aumentado su posición en 5 puestos en ASP.NET (en relación al último mes)
Gráfica de ASP.NET

Campo Booleano almacena Null en la Tabla y recibe un True en el Modelo

Publicado por Franklyn farchacon@gmail.com (2 intervenciones) el 29/10/2018 21:52:38
Saludos. Estoy enviando parámetros a una Tabla desde ASP.net y C#.
Todos se almacenan sin novedad en la tabla AHD_Solicitudes, a excepción de una columna Booleana (Status_Solicitud), la cual le asigno un valor True desde el código y termina almacenando un valor NULL.

Cabe destacar que hice un modulo para guardar Casos y en la columna 'Status_Caso' si logro almacenar un valor True (o 1 a efectos de SQL Server)

A continuación parte del código y parte del Script de DB:

[MODELO Casos]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/**Sale bien**/
public partial class AHD_Casos
{
    /**/
    public AHD_Casos createCasosModel(AHD_Casos model)
    {
        var vCasos = new AHD_Casos();
        try
        {
            using (var vContext = new Models.AuroraHDEntities())
            {
                vContext.Entry(model).State = EntityState.Added;
                vContext.SaveChanges();
            }
        }
 
        catch (DbEntityValidationException e)
        {
 
            foreach (var entityValidationErrors in e.EntityValidationErrors)
            {
                foreach (var validationError in entityValidationErrors.ValidationErrors)
                {
                    Console.Write("Property: " + validationError.PropertyName + " Error: " + validationError.ErrorMessage);
                    Console.WriteLine(e);
                    throw new Exception(e.Message);
                }
            }
        }
        return vCasos;
    }
 
    [Key]
    [NotMapped]/**/
    public int Codigo_Caso { get; set; }
 
    [DataType(DataType.Text)]
    public String Serial_Caso { get; set; }
 
    [Required(ErrorMessage = "El campo [Diagnostico del Caso] es obligatorio.")]
    [Display(Name = "Diagnostico del Caso")]
    [DataType(DataType.Text)]
    public string Diagnostico_Caso { get; set; }
 
    [Required(ErrorMessage = "La [Prioriad del Caso] es obligatoria.")]
    [Display(Name = "Prioriad del Caso")]
    [DataType(DataType.Text)]
    public string Prioridad_Caso { get; set; }
 
    public bool Status_Caso { get; set; }
 
    public string Solucion_Caso { get; set; }
 
    [Required(ErrorMessage = "La [Fecha de Creación del Caso] es obligatoria.")]
    [Display(Name = "Fecha de Creación del Caso")]
    [DataType(DataType.DateTime)]
    public System.DateTime Fecha_Creacion_INS { get; set; }
 
    public Nullable<System.DateTime>  Fecha_Atencion { get; set; }
 
    public Nullable<System.DateTime> Fecha_UPD { get; set; }
 
    public Nullable<System.DateTime> Fecha_Solucion { get; set; }
 
    [ForeignKey("Codigo_Empleado")]
    [Required(ErrorMessage = "El [Empleado] es obligatorio.")]
    [Display(Name = "Empleado Asignado")]
    public Nullable<int> Codigo_Empleado { get; set; }
 
    [ForeignKey("Codigo_Solicitud")]
    public Nullable<int> Codigo_Solicitud { get; set; }
 
    public virtual AHD_Empleados AHD_Empleados { get; set; }
    public virtual AHD_Solicitudes AHD_Solicitudes { get; set; }
    public virtual ICollection<AHD_Configuraciones> AHD_Configuraciones { get; set; }
}


[MODELO Solicitud]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**Sale mal**/
public partial class AHD_Solicitudes : System.Collections.IEnumerable
{
    public System.Collections.IEnumerator GetEnumerator() { throw new NotImplementedException(); }
 
    /**/
        public AHD_Solicitudes createSoliciModel(AHD_Solicitudes model)
        {
        var vSolici = new AHD_Solicitudes();
        try
        {
            using (var vContext = new Models.AuroraHDEntities())
            {
                vContext.Entry(model).State = EntityState.Added;
                vContext.SaveChanges();
            }
       }
       catch (Exception e) { throw new Exception(e.Message); }
       return vSolici;
   }
 
    /**/
    [Key]
    public int Codigo_Solicitud { get; set; }
 
    [Display(Name = "Serial de la Solicitud")]
    public string Serial_Solicitud { get; set; }
 
    [Required(ErrorMessage = "El campo Descripción de la Solicitud es obligatorio.")]
    [Display(Name = "Descripción de la Solicitud")]
    public string Descripcion_Solicitud { get; set; }
 
    [Required(ErrorMessage = "La Fecha de Creación de la Solicitud es obligatoria.")]
    [Display(Name = "Fecha de Creación de la Solicitud")]
    public Nullable<System.DateTime> Fecha_INS { get; set; }
 
    public Nullable<System.DateTime> Fecha_UPD { get; set; }
 
    public string Usuario_INS { get; set; }
 
    public string Usuario_UPD { get; set; }
 
    public Nullable<int> Codigo_Usuario { get; set; }
 
    [Required(ErrorMessage = "El Departamento Solicitante es obligatorio.")]
    [Display(Name = "Departamento Solicitante")]
    public Nullable<int> Codigo_Departamento { get; set; }
 
    public bool Status_Solicitud { get; set; }
 
    public virtual AHD_Casos AHD_Casos { get; set; }
    public virtual AHD_Departamentos AHD_Departamentos { get; set; }
    public virtual AHD_Usuarios AHD_Usuarios { get; set; }
}


[CONTROLADOR]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* Sale mal */
[HttpPost]
public ActionResult createSoliciView(AHD_Solicitudes model) {
    try {
        var vParseCodigo_Usuario = 0;
 
        var vSerial_SoliciMax2 = (db.AHD_Solicitudes.Select(x => x.Codigo_Solicitud).Max())+1;
        model.Serial_Solicitud = "S" + vSerial_SoliciMax2;
        model.Fecha_INS = DateTime.Now;
        model.Usuario_INS = string.Join(" ", @Session["UserName"]);
        model.Usuario_UPD = "";
        vParseCodigo_Usuario = Convert.ToInt32(@Session["UserID"]);
        model.Codigo_Usuario = vParseCodigo_Usuario;
        List<AHD_Departamentos> listadepart = db.AHD_Departamentos.ToList();
        ViewBag.ListOfDepartmentos = new SelectList(listadepart, "Codigo_Departamento", "Nombre_Departamento");
        model.Status_Solicitud = true;
    }
    catch(DbEntityValidationException ex) {}
    if (ModelState.IsValid)
    {
        try {
            db.Entry(model).State = EntityState.Added;
            db.SaveChanges();
        }
        catch (DbEntityValidationException e) { Console.WriteLine(e); }
        ModelState.Clear();
        return View();
    }
    else {
        return View("~/Views/Home/createSoliciView.cshtml",model);
    }
}
 
/* Sale bien */
[HttpPost]
public ActionResult createCasosView(AHD_Casos model)
{
    try
    {
        var vSerial_SoliciMax2 = db.AHD_Solicitudes.Select(x => x.Codigo_Solicitud).Max();//CORRGIR = Debe ser el acual no el mayor
        var vSerial_CasoMax =  ((db.AHD_Casos.Select(x => x.Codigo_Caso).Max())+1);
        model.Serial_Caso = "C" + vSerial_CasoMax + "S" + vSerial_SoliciMax2;
 
        ViewBag.vSerial_Solicitud = model.Serial_Caso;
 
        model.Status_Caso = true;
 
        model.Fecha_Creacion_INS = Convert.ToDateTime(DateTime.Now);
        model.Codigo_Empleado = db.AHD_Empleados.Select(x => x.Codigo_Empleado).Max();
 
        List<AHD_Empleados> listaemplea = db.AHD_Empleados.ToList();
        ViewBag.ListOfEmpleados = new SelectList(listaemplea, "Codigo_Empleado", "Nombre_Empleado");
 
        int vCodigo_CasoMax = ((db.AHD_Casos.Select(x => x.Codigo_Caso).Max()));
        model.Codigo_Caso = Convert.ToInt32(vCodigo_CasoMax);
    }
    catch (DbEntityValidationException ex)
    {
    }
    if (ModelState.IsValid)
    {
        try
        {
            vCasos.createCasosModel(model);
        }
        catch (DbEntityValidationException e) { Console.WriteLine(e); }
        ModelState.Clear();
        return View();
    }
    else
    {
        return View("~/Views/Home/createCasosView.cshtml", model);
    }
}

[Scripts DB]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
CREATE TABLE [dbo].[AHD_Casos](
	[Codigo_Caso] [int] IDENTITY(1,1) NOT NULL,
	[Serial_Caso] [char](20) NULL,
	[Diagnostico_Caso] [nvarchar](100) NULL,
	[Prioridad_Caso] [char](10) NULL,
	[Status_Caso] [bit] NULL,
	[Solucion_Caso] [nvarchar](1000) NULL,
	[Fecha_Creacion_INS] [datetime] NULL,
	[Fecha_Atencion] [datetime] NULL,
	[Fecha_UPD] [datetime] NULL,
	[Fecha_Solucion] [datetime] NULL,
	[Codigo_Empleado] [int] NULL CONSTRAINT [DF__AHD_Casos__Codig__108B795B]  DEFAULT ((1)),
	[Codigo_Solicitud] [int] NULL CONSTRAINT [DF__AHD_Casos__Codig__117F9D94]  DEFAULT ((1)),
 CONSTRAINT [PK__AHD_Caso__8474B8972AE5F8DD] PRIMARY KEY CLUSTERED
(
	[Codigo_Caso] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
 
CREATE TABLE [dbo].[AHD_Solicitudes](
	[Codigo_Solicitud] [int] IDENTITY(1,1) NOT NULL,
	[Serial_Solicitud] [char](10) NULL,
	[Descripcion_Solicitud] [nvarchar](1000) NULL,
	[Fecha_INS] [datetime] NULL,
	[Fecha_UPD] [datetime] NULL,
	[Usuario_INS] [nvarchar](50) NULL,
	[Usuario_UPD] [nvarchar](50) NULL,
	[Codigo_Usuario] [int] NULL,
	[Codigo_Departamento] [int] NULL,
	[Status_Solicitud] [bit] NULL,
 CONSTRAINT [PK_AHD_Solicitudes] PRIMARY KEY CLUSTERED
(
	[Codigo_Solicitud] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

Cabe destacar que en los puntos de interrupción aparecen los parametros booleanos con valor true:

casosError
casosErrorDB
solicitudError
solicitudErrorDB

Ademas, he creado un a tabla de prueba definiendo dicha columna Booleana como NOT NULL y a la hora de registrar en dicha tabla genera error...
1
SqlException: No se puede insertar el valor NULL en la columna 'Status_Solicitud', tabla 'AuroraHD5.dbo.AHD_Solicitudes'. La columna no admite valores NULL. Error de INSERT.

Por favor, quisiera saber porque si en el punto de interrupción se recibe True en un parámetro, se almacena Null en la en su respectivo registro tabla. No le veo sentido.
Ademas que ya tengo un modulo similar y si logra almacenar true en el campo booleano.
Por favor, si alguien me puede ayudar a solventar esta situación o donde estaría la falla...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 31
Ha mantenido su posición en ASP.NET (en relación al último mes)
Gráfica de ASP.NET

Campo Booleano almacena Null en la Tabla y recibe un True en el Modelo

Publicado por Ismael (14 intervenciones) el 13/11/2018 18:40:30
seguramente, puede que en vez de true o false, espere un 0 o un 1, y cuando haces el not null con true, como no lo reconoce intenta meter un null y no le deja.

Puede que el modelo no esté correcto o que en la bbdd no hace la conversión implícita de 0 a false y de 1 a true...

Un Saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Franklyn
Val: 3
Ha aumentado su posición en 5 puestos en ASP.NET (en relación al último mes)
Gráfica de ASP.NET

Campo Booleano almacena Null en la Tabla y recibe un True en el Modelo

Publicado por Franklyn (2 intervenciones) el 16/11/2018 19:27:36
Agradecido Ismael,

1) He revisado el Modelo (tanto de Casos como de Solicitudes) y no veo nada raro(de hecho lo he posteado en la pregunta inicial)

2) He tratado de hacer una conversión implícita y explicita a nivel de código y los resultados son los mismos

Explicita
1
model.Status_Solicitud = Convert.ToBoolean(1);

Implícita
1
2
3
4
//MODELO
public bool Status_Caso { get; set; }
//CONTROLADOR
model.Status_Solicitud = 1

3) Por favor, indícame como hacer una conversión implícita desde la bbdd?? Lo hago a nivel de manejador o de script??
Estoy trabajando con MySQL Server 2012

Agradecido de antemano por tu respuesta...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar