web-dev-qa-db-fra.com

Migration en code d'abord: comment définir la valeur par défaut pour une nouvelle propriété?

J'utilise EF6 pour stocker des instances de la classe report dans ma base de données. La base de données contient déjà des données. Supposons que je veuille ajouter une propriété à report,

public class report {
    // ... some previous properties

    // ... new property:
    public string newProperty{ get; set; }
}

Maintenant, si je vais dans la console du gestionnaire de packages et exécute

add-migration Report-added-newProperty
update-database

J'obtiendrai un fichier dans le dossier '/ Migrations' en ajoutant une colonne newProperty à la table. Cela fonctionne bien. Cependant, sur les anciennes entrées de la base de données, la valeur de newProperty est désormais une chaîne vide. Mais je veux que ce soit, par exemple, "vieux".

Ma question est donc la suivante: comment définir les valeurs par défaut des nouvelles propriétés (de tout type) dans le script de migration (ou ailleurs)?

35
EluciusFTW

Si vous voyez le code de migration généré, vous verrez AddColumn

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

Vous pouvez ajouter defaultValue

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

Ou ajoutez defaultValueSql

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

Vous devez changer la ligne dans votre script de migration qui ajoute la propriété/colonne comme ceci:

AddColumn("dbo.reports", "newProperty", c => c.String(nullable: false, defaultValue: "test"));
5
ngu

J'espère que cela aide quelqu'un. Mettre tout ensemble des réponses précédentes (exemple en utilisant une propriété booléenne):

1) Ajoutez une nouvelle propriété à l'entité.

/// <summary>
/// Determines if user is enabled or not. Default value is true
/// </summary>
public bool IsEnabled { get; set; }

2) Exécutez la commande ci-dessous pour ajouter la nouvelle modification dans les migrations.

add-migration addIsEnabledColumn

3) Un fichier de migration est créé à partir de la commande ci-dessus, ouvrez ce fichier.

enter image description here

4) Définissez la valeur par défaut.

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