none
Uso de sequence en una tabla. y consumirla desde Entity Framework RRS feed

  • Pregunta

  • Buenas tardes estimados, 

    tengo problemas con una secuencia (Sequence) esto fue lo que hice

    CREATE TABLE tblLibroCompras
    (
    Id int identity(1,1),
    FechaMovimiento datetime not null,
    UsuarioId int not null,
    NumeroExpediente bigint not null
    CONSTRAINT PK_tblDetalleGastosEgresos PRIMARY KEY (Id)
    CONSTRAINT FK_tblMaestroGastosEgresos_tblUsuarios FOREIGN KEY(UsuarioId) REFERENCES tblUsuarios(Id)
    );
    GO
    

    ahora., hice esta secuencia y la inice en 26 ya que los numeros anteriores los ingreso desde un insert desde SQL, los demás los ingresare desde la aplicación.

    create SEQUENCE EnumeradorMaestroGastosEgreso  
        AS bigint
        START WITH 26  
        INCREMENT BY 1 ;  
    	go
    alter table tblMaestroGastosEgresos
    add CONSTRAINT secuencia default (next value for EnumeradorMaestroGastosEgreso) for NumeroExpediente
    

    bueno, resulta que ya tengo los datos ingresados y efectivamente el ultimo es 25, ahora ejecuto mi sentencia y creo mi sequence, pero desde mi aplicación no cambia, me sale un error que dice que el campo NumeroExpediente no acepta nulos, lo cual es lógico, pero yo pensaba que con esta linea de código se me aumentaría al insertar un dato desde mi aplicación

    default (next value for EnumeradorMaestroGastosEgreso) for NumeroExpediente

    intente agregando el identity(1,1) a mi columna NumeroExpediente

    numeroExpediente identity(1,1) not null,

    pero no me deja agregar dos identity en mi tabla.

    por favor como resuelvo mi problema. todos los ejemplos que hay solo muestran a nivel sql server no hay un ejemplo con Entity framework, porque yo estoy trabajando con EF.

    por favor alguien me puede ayudar.

    les agradezco por la ayuda.

    RM

    miércoles, 8 de julio de 2020 17:02

Respuestas

  • Estimado Alberto, lo que Ud. me dice me llevo a ver en las propiedades del modelo entonces llegue a esta conclusión, que no necesite de agregar la linea 

     [DatabaseGenerated(DatabaseGeneratedOption.Computed)]

    solamente hice este cambio en el modelo y funciona,

    y eso fue todo, ahora espero que esta sea la solución a mi problema, la opcion StoreGeneratedPattern estaba en un inicio en None

    Estimado si hay algo mas que acotar me gustaría saberlo, de no ser así, muchas gracias.

    Roberto

    miércoles, 8 de julio de 2020 21:13

Todas las respuestas

  • El error te sale porque EF no "sabe" que ese campo tiene un default que se genera con la secuencia, y en consecuencia intenta enviar un valor a grabar. Y como en memoria no tiene nada en ese campo, envía un NULL, y entonces éste suplanta el default y da un error.

    El remedio es decirle a EF que no debe enviar un valor para ese campo. Para conseguir esto, tienes que buscar donde tienes definida la clase con el modelo de datos para esa tabla, y decorar con un atributo la propiedad que representa ese campo:

    using System.ComponentModel.DataAnnotations.Schema;
    // ...
    
    public class tblLibroCompras
    {
        // ...
        [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
        public int NumeroExpediente { get; set; }
        // ...
    }

    miércoles, 8 de julio de 2020 17:59
  • Estimado Alberto Poblacion

    de antemano muchas gracias, hice como se me indico.

    public int Id { get; set; }
            public System.DateTime FechaMovimiento { get; set; }
            public int UsuarioId { get; set; }
            [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
            public long NumeroExpediente { get; set; }

    si bien ya no hay el error, en la base de datos no se incremanta el valor, todos me salen el numero (0), osea no se incrementa

    cual mas puede ser el problema por favor.

    gracias

    RM

    miércoles, 8 de julio de 2020 19:06
  • Estimado Alberto, lo que Ud. me dice me llevo a ver en las propiedades del modelo entonces llegue a esta conclusión, que no necesite de agregar la linea 

     [DatabaseGenerated(DatabaseGeneratedOption.Computed)]

    solamente hice este cambio en el modelo y funciona,

    y eso fue todo, ahora espero que esta sea la solución a mi problema, la opcion StoreGeneratedPattern estaba en un inicio en None

    Estimado si hay algo mas que acotar me gustaría saberlo, de no ser así, muchas gracias.

    Roberto

    miércoles, 8 de julio de 2020 21:13