为什么不使用EF迁移将布尔列保留到我的数据库?

时间:2017-08-14 12:10:38

标签: c# entity-framework ef-code-first data-migration

所以我有这个代表我数据库中的表的POCO:

// 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)
    {
    }
}

我在以后的迁移中添加了Alerted属性,我已对数据库进行了更新:

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");
}

矛盾的是,在添加迁移后我update-database时,该列没有添加到表中。

问题是,我必须手动添加列,因为在add-migration之后默认情况下它不包含在迁移中。

如果没有删除所有迁移并重新开始使用当前模型(经验证明我无法解决问题),我怎样才能完成这项工作以及为什么它不起作用呢?

1 个答案:

答案 0 :(得分:1)

由于您在该特定表中已有​​记录,因此可能会在后台收到错误,表明可能会丢失数据。

尝试提供&#34; nullable&#34;和&#34; defaultValue&#34; AddColumn语句中的属性

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