Estoy usando EF6 para almacenar instancias de la clase de report en mi base de datos. La base de datos ya contiene datos. Digamos que quería agregar una propiedad para report ,
public class report { // ... some previous properties // ... new property: public string newProperty{ get; set; } }Ahora, si voy a la consola del administrador de paquetes y ejecuto
add-migration Report-added-newProperty update-database Obtendré un archivo en la carpeta '/Migraciones' agregando una newProperty columna de propiedad a la tabla. Esto funciona bien. Sin embargo, en las entradas más antiguas de la base de datos, el valor de newProperty ahora es una cadena vacía. Pero quiero que sea, por ejemplo, "viejo".
Entonces mi pregunta es: ¿Cómo establezco valores predeterminados para nuevas propiedades (de cualquier tipo) en el script de migración (o en otro lugar)?
Si ve el código de migración generado, verá AddColumn
AddColumn("dbo.report", "newProperty", c => c.String(nullable: false)); Puede agregar defaultValue
AddColumn("dbo.report", "newProperty", c => c.String(nullable: false, defaultValue: "old")); O agregue defaultValueSql
AddColumn("dbo.report", "newProperty", c => c.String(nullable: false, defaultValueSql: "GETDATE()"));Espero que ayude a alguien. Poniendo todo junto de respuestas anteriores (ejemplo usando una propiedad booleana) :
1) Agregar una nueva propiedad a la entidad.
/// <summary> /// Determines if user is enabled or not. Default value is true /// </summary> public bool IsEnabled { get; set; }2) Ejecute el siguiente comando para agregar el nuevo cambio en las migraciones.
add-migration addIsEnabledColumn3) Se crea un archivo de migración a partir del comando anterior, abra ese archivo.
4) Establezca el valor predeterminado.
public override void Up() { AddColumn( "dbo.AspNetUsers", "IsEnabled", c => c.Boolean( nullable: false, defaultValue: true ) ); }Debe cambiar la línea en su secuencia de comandos de migración que agrega la propiedad/columna de esta manera:
AddColumn("dbo.reports", "newProperty", c => c.String(nullable: false, defaultValue: "test"));