none
Ayuda con Actualización de modelos en BD de produccion RRS feed

  • Pregunta

  • Les cuento mi problemática :

    1.- Resulta que tengo una Aplicación en producción y no esta generando problemas, ahora bien hice algunas actualizaciones a los modelo los cuales  ahora tiene por ejemplo una ForeKey que anteriormente no estaba incluida por ejemplo:

    El modelo de MtoUsuario con tenia la siguiente estructura


    y se actualizo a la siguiente


    se agrego la columna RoId que es una nueva entidad ahora bien como ya tabla MtoUsuario ya tiene registro, quero saber como hacer la actualización para:

    1.- Migrar la entidad con la siguiente estructura

    2.- Afectar la tabla Usuario(agregando la columna RolId) sin que se pierda la información

    las Entidades las estoy manejando con EntitiFrameWork: por ejemplo para la entidad Rol

     public class Rol
        {
            [key]
            public int RolId { get; set; }
    
            public string Descripcion { get; set; }
            
    
            public virtual ICollection<MtoUsuario> MtoUsuarios { get; set; }
    
            public virtual ICollection<RolOperacion> RolOperacion { get; set; }
        }

    para lo cual estoy pensando intentar con:

    Update-Database -Script

    pero no estoy muy seguro, agradecería si me dieran algunas recomendaciones de como realizar las modificaciones a mi DB en Producción.

    De antemano muchas gracias.


    Horacio Xochitemol Bautista

    jueves, 23 de enero de 2020 17:00

Todas las respuestas

  • hola

    >>Migrar la entidad con la siguiente estructura

    puede hacer que la nueva columna RolId permita null, con lo cual sera un valor opcional que se podra completar mas adelanate

    O sino crearla obligatoria pero con un valor por defecto, entonces cuando se crea por primera vez todos los registros tendran el mismo valor que despues iras modificando segun cada usuario

    >>para lo cual estoy pensando intentar con

    Pero para eso tenes que tener migrations

    Deberias tener un migrations inicial en donde ese campo no existia para que el migration que lo agrega ejecute la accion que lo cree

    igual ojo, porque el migration de por si no pone datos, salvo que lo hagas especificamente

    igual aqui aplica las dos opciones

    - campos opcional con null

    - campo obligatorio con valor por defecto

    >>agradecería si me dieran algunas recomendaciones de como realizar las modificaciones a mi DB en Producción.

    antes de ejecutar nada a produccion realiza un restore de un backup (de produccion por supuesto) y prueba en un ambiente local para ver que todo se actualiza sin errores

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 23 de enero de 2020 17:28
  • Hola

    Por seguridad de lo que vas ha hacer y dado que estas trabajando con producción yo te recomendaría hacer lo siguiente.

    Vamos a usar visual studio para comparar ambas bases, la que tienes de desarrollo y la que tienes de producción, vamos a dejar que visual studio te genere el script de actualización, para también evitar una perdida de información.

    ¿Qué vas ha hacer?

    Abre visual studio y vas a crear un proyecto de base de datos de SQL server

    una vez que tengas esto a el proyecto le vas a cargar el esquema de desarrollo (es útil hacerlo de esta forma por que si usas Azure Devops también tienes un control de cambios de la base de datos)

    sobre tu proyecto vas a dar click, el menú dice importar y vas a seleccionar base de datos

    Importas la base

    Te vas a ir nuevamente a tu proyecto y vas a abrir la herramienta de comparación de esquemas (en realidad puedes usar esta herramienta de forma directa, a mi me gusta generar el proyecto para tener el historial del mismo)

    yy vas a comparar ambas bases, la herramienta te genera un script con los cambios necesarios a aplicar

    Antes de ejecutar cualquier cosa en producción revisa el script.

    IMPORTANTE, este script por default todo lo mente en una transacción para que tengas la posibilidad de regresar los cambios si es que hay algún problema, si lo vas ha hacer de forma manual, todo agrégalo en una transacción de esta forma

    begin tran -- Inicia transaccion

    cambios

    Commit tran -- si todo es correcto (los cambios se reflejan en producción hasta este punto)

    Rollback tran -- si es incorrecto algo



    Ing. Carlos Monroy

    jueves, 23 de enero de 2020 18:05