2017-08-14 6 views
1

J'ai ce POCO qui représente une table dans ma base de données:Pourquoi une colonne booléenne n'est pas persistante dans ma base de données avec EF Migrations?

// BaseDataObject includes the Id property among others. 
public class SupplierDocument : BaseDataObject 
{ 
    public int SupplierId { get; set; } 
    public string Name { get; set; } 
    public DateTime ExpiryDate { get; set; } 
    public string MimeType { get; set; } 
    public byte[] Document { get; set; } 
    public bool Alerted { get; set; } 
} 

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 

    public DbSet<PaymentTerm> PaymentTerms { get; set; } 
    public DbSet<Supplier> Suppliers { get; set; } 
    public DbSet<SupplierDocument> SupplierDocuments { get; set; } 
    public DbSet<SupplierService> SupplierServices { get; set; } 
    public DbSet<Voucher> Vouchers { get; set; } 


    public ApplicationDbContext() 
     : base("DevConnection", throwIfV1Schema: false) 
    { 
    } 
} 

j'ai ajouté la propriété Alerted dans une migration plus tard que je l'ai fait une mise à jour de la base de données avec:

public override void Up() 
{ 
    AddColumn("dbo.Suppliers", "Area", c => c.String()); 
    AddColumn("dbo.Vouchers", "IssuedFor", c => c.String()); 
    AddColumn("dbo.SupplierDocuments", "Alerted", c => c.Boolean()); 
} 

public override void Down() 
{ 
    DropColumn("dbo.Vouchers", "IssuedFor"); 
    DropColumn("dbo.Suppliers", "Area"); 
    DropColumn("dbo.SupplierDocuments", "Alerted"); 
} 

Paradoxalement, la colonne n'est pas ajoutée à la table lorsque I update-database après l'ajout de la migration. En fait, j'ai dû ajouter manuellement la colonne car elle n'était pas incluse dans la migration par défaut après add-migration. À part de supprimer toutes les migrations et de recommencer avec le modèle actuel (ce que l'expérience m'a montré n'est pas garanti pour résoudre le problème de toute façon), comment puis-je faire fonctionner cela et pourquoi cela ne fonctionne-t-il pas?

+0

Je ne peux même pas dire de façon concluante que cela se produit * uniquement * avec des champs booléens. C'est juste le cas cette fois. – Ortund

+0

J'ai une autre chaîne de connexion dans web.config appelée * "LiveConnection" * qui cible une base de données distante au lieu de. \ SQLEXPRESS – Ortund

+0

Que montre 'update-database -verbose'? –

Répondre

1

Comme vous avez déjà des enregistrements dans ce tableau particulier, vous pouvez avoir une erreur en arrière-plan suggérant une perte potentielle de données.

Essayez propriétés « fournir nullables » et « defaultValue » dans la déclaration de AjouteColonne

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