update remove net migrations framework force first existing enable code automatic asp c# .net entity-framework entity-framework-6 ef-migrations

c# - remove - Migración de código primero: ¿Cómo establecer el valor predeterminado para la nueva propiedad?



remove migration entity framework core (4)

Estoy utilizando 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

newProperty un archivo en la carpeta ''/ Migrations'' agregando una newProperty columna de newProperty 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 cualquier otro lugar)?


Descubrí que solo usar Auto-Property Initializer en la propiedad de la entidad es suficiente para hacer el trabajo.

Por ejemplo:

public class Thing { public bool IsBigThing { get; set; } = false; }


Espero que ayude a alguien. Poner todo junto de respuestas anteriores (ejemplo utilizando 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 addIsEnabledColumn

3) Se crea un archivo de migración desde el comando anterior, abra ese archivo.

4) Establecer el valor por defecto.

public override void Up() { AddColumn("dbo.AspNetUsers", "IsEnabled", c => c.Boolean(nullable: false, defaultValue: true)); }


Si ve el código de migración generado verá AddColumn

AddColumn("dbo.report", "newProperty", c => c.String(nullable: false));

Usted puede agregar valor defaultValue

AddColumn("dbo.report", "newProperty", c => c.String(nullable: false, defaultValue: "old"));

O añada defaultValueSql

AddColumn("dbo.report", "newProperty", c => c.String(nullable: false, defaultValueSql: "GETDATE()"));


Tiene que 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"));