Comment définir une valeur par défaut sur un booléen dans un modèle Code First?

J’ai une table / modèle existant dans lequel je veux déposer une nouvelle colonne booléenne. Cette table contient déjà plusieurs centaines de lignes de données et je ne peux pas toucher aux données existantes. Mais .. Cette colonne ne sera PAS nullable, je dois donc fournir une valeur par défaut true à toutes les lignes existantes.

 public class Revision { ... public Boolean IsReleased { get; set; } .... } 

IMPORTANT:

(C’était dans le PO, mais les gens semblaient manquer.)

Lorsque les bases de données sont mises à jour avec la migration, toutes les lignes existantes recevant cette nouvelle colonne DOIVENT avoir leurs valeurs définies sur True.

Une autre option consiste à créer un constructeur par défaut et à définir les propriétés avec les valeurs par défaut dont vous avez besoin:

 public class Revision { public Boolean IsReleased { get; set; } public Revision() { IsReleased=true; } } 

Pour définir les valeurs sur true pour les lignes existantes lorsque vous exécutez la commande Update-Database , vous pouvez le faire dans votre classe de Configuration :

 protected override void Seed(YourContext context) { var entities=context.Revisions.Where(r=>!r.IsReleased) foreach(var e in entities) { e.IsReleased=true; //context.Entry(e).State = EntityState.Modified; If you have disabled change tracking then add this line } context.SaveChanges(); } 

Mettre à jour

S’il s’agit d’une nouvelle colonne que vous ajoutez via la migration, vous pouvez également le faire:

 AddColumn("dbo.Revisions", "IsReleased", c => c.Boolean(nullable: false, defaultValue: true)); 

Vous pouvez éviter d’utiliser des champs et tirer parti de l’ initialisation de la propriété automatique , une nouvelle fonctionnalité de C # 6.

Ceci définira la valeur par défaut sur true lorsque cette colonne est ajoutée à votre firebase database.

 public class Revision { ... public Boolean IsReleased { get; set; } = true; .... } 

Modifier pour inclure le commentaire de @BrewMate :

Si toutes vos valeurs sont définies sur False lors de la mise à jour de la firebase database, assurez-vous que le formateur JSON gère les valeurs par défaut. Le formateur JSON ignorera les valeurs par défaut par défaut, puis votre firebase database définit le booléen sur sa valeur par défaut, false . Voir le lien ci-dessous, je voudrais essayer par défaut comme énumération: http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_DefaultValueHandling.htm

Malheureusement, je n’étais pas sur la version de C # pour pouvoir utiliser la suggestion de @Brandon Minnick, qui semble la plus simple. D’autres suggestions semblaient plutôt demander beaucoup de travail à la place que j’ai finalement fait: https://stackoverflow.com/a/46436861/1819403

Vous pouvez simplement éviter les propriétés implémentées automatiquement et définir la valeur de la propriété sur true lorsque vous initialisez votre object.

 private Boolean _isReleased = true; public Boolean IsReleased { get { return _isReleased; } set { _isReleased = value; } }