none
Valores por defecto en EF RRS feed

  • Pregunta

  • Buenos días.

    Necesito ayuda con la inserción de datos en una tabla mediante Entity Framework.

    El tema está en que dispongo de una tabla con un montón de campos de los cuales no se permiten valores NULOS pero tienen valor por defecto.

    Necesito agregar registro a esa tabla pero no necesariamente necesito rellenar todos los campos por codigo.... No se si me explico. Pongo un ejemplo.

    dim datos as new Contexto
    dim cabecera as new TablaEntityFrameWork
    
    'La tabla cabecera tiene por ejemplo 10 campos pero a la hora de llenar la tabla hago lo siguiente
    
    cabecera.campo1 = valor1
    cabecera.campo2 = valor2
    cabecera.campo3 = valor3
    cabecera.campo4 = valor4
    cabecera.campo5 = valor5
    
    datos.tabla.add(cabecera)
    datos.SaveChanges()

    El problema viene que al no registrar los campos restantes y me error de validación de datos y no me deja añadir... ¿Hay alguna manera de que al hacer el nuevo me rellene estos valores con sus valores por defecto?

    He visto un método que es datos.tabla.defaultisempty() pero no se como usarlo.

    Gracias de antemano.

    Un saludo.

    miércoles, 31 de octubre de 2018 11:41

Respuestas

  • Bueno pues me respondo a mi mismo y por si a alguien le puede interesar.

    Al final he usado reflection y lo que hago es recorrer la objeto creado y recorro sus propiedades y dependiendo del tipo de campo le establezco un valor.

    	Public Sub InicializarRegistro(ByRef pObjeto As Object)
    
    
    		For Each propiedad As PropertyInfo In pObjeto.GetType().GetProperties
    
    			'MessageBox.Show(propiedad.PropertyType.ToString())
    
    			Dim tipo As TypeCode = Type.GetTypeCode(propiedad.PropertyType)
    
    			Select Case tipo
    				Case TypeCode.Int16
    					propiedad.SetValue(pObjeto, New Int16)
    				Case TypeCode.Byte
    					propiedad.SetValue(pObjeto, New Byte)
    				Case TypeCode.Decimal
    					propiedad.SetValue(pObjeto, New Decimal)
    				Case TypeCode.String
    					propiedad.SetValue(pObjeto, "")
    				Case TypeCode.DateTime
    					propiedad.SetValue(pObjeto, Now.Date)
    				Case TypeCode.Object
    			End Select
    
    		Next
    
    
    
    	End Sub

    Supongo que esto se puede mejorar muchísimo. 

    Lo único que me queda por establecer es el valor -1 en un campo de tipo Byte (y en la tabla de SQL Server esta como TinyInt)

    Un saludo.



    viernes, 2 de noviembre de 2018 10:44

Todas las respuestas

  • crear una instancia en el model con los valores iniciales poor ejemplo.

    public class MtoProcedimiento    
        {
            public MtoProcedimiento() {
    
               variable1=1;
            }
    
    
      public int variable1{ get; set; }
    }

    espero te ayude.

    saludos.


    Horacio Xochitemol Bautista

    • Propuesto como respuesta Xochitemol miércoles, 31 de octubre de 2018 14:02
    miércoles, 31 de octubre de 2018 14:02
  • No lo pillo :(:(:(

    En el mismo fichero del contexto? El que genera entity framework?

    Gracias de nuevo!

    miércoles, 31 de octubre de 2018 15:11
  • Bueno pues me respondo a mi mismo y por si a alguien le puede interesar.

    Al final he usado reflection y lo que hago es recorrer la objeto creado y recorro sus propiedades y dependiendo del tipo de campo le establezco un valor.

    	Public Sub InicializarRegistro(ByRef pObjeto As Object)
    
    
    		For Each propiedad As PropertyInfo In pObjeto.GetType().GetProperties
    
    			'MessageBox.Show(propiedad.PropertyType.ToString())
    
    			Dim tipo As TypeCode = Type.GetTypeCode(propiedad.PropertyType)
    
    			Select Case tipo
    				Case TypeCode.Int16
    					propiedad.SetValue(pObjeto, New Int16)
    				Case TypeCode.Byte
    					propiedad.SetValue(pObjeto, New Byte)
    				Case TypeCode.Decimal
    					propiedad.SetValue(pObjeto, New Decimal)
    				Case TypeCode.String
    					propiedad.SetValue(pObjeto, "")
    				Case TypeCode.DateTime
    					propiedad.SetValue(pObjeto, Now.Date)
    				Case TypeCode.Object
    			End Select
    
    		Next
    
    
    
    	End Sub

    Supongo que esto se puede mejorar muchísimo. 

    Lo único que me queda por establecer es el valor -1 en un campo de tipo Byte (y en la tabla de SQL Server esta como TinyInt)

    Un saludo.



    viernes, 2 de noviembre de 2018 10:44