但是,我们通常可以通过添加一个空白的“合并”迁移来获得正确的模型快照。
https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/migrations/teams#option-1-add-a-blank-merge-migration
然而在我们最近的合并中发生了一些非常奇怪的事情。我们的模型和数据库不同步。下面给出的模型有一个包含五个属性的复合主键。
public class NotifiedEvent
{
[Key, Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[MaxLength(15)]
public string BusinessSystemId { get; set; }
[Key, Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int CaseId { get; set; }
[Key, Column(Order = 2)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[MaxLength(5)]
public string Action { get; set; }
[Key, Column(Order = 3)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Cycle { get; set; }
[ForeignKey("BusinessSystemId,CaseId,Action,Cycle")]
public virtual TPRenewalCycle TPRenewalCycle { get; set; }
[Key, Column(Order = 4)]
[ForeignKey("TPEvent")]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int EventNo { get; set; }
public virtual TPEvent TPEvent { get; set; }
[ForeignKey("BusinessSystemId,CaseId,Action,Cycle,EventNo")]
public virtual TPCaseEvent TpCaseEvent { get; set; }
public int NotifiedBatchId { get; set; }
public virtual NotifiedBatch NotifiedBatch { get; set; }
[Key, Column(Order = 5)]
public DateTime EventDate { get; set; }
public DateTime Created { get; set; }
public DateTime Updated { get; set; }
}
但是,在数据库中有一个由六列组成的复合主键。我知道这已经被编辑了,但是我现在找不到它的迁移。
当我尝试创建新的迁移时,它如下所示:
public partial class RemoveDueDatefromNotifiedEvent : DbMigration
{
public override void Up()
{
}
public override void Down()
{
}
}
如果我再次将DueDate键添加到模型中,实体框架将再次尝试将现有键添加到数据库中。
[Key, Column(Order = 6)]
public DateTime DueDate { get; set; }
public partial class RemovedDueDatefromNotifiedEvent : DbMigration
{
public override void Up()
{
DropPrimaryKey("dbo.NotifiedEvents");
AddColumn("dbo.NotifiedEvents", "DueDate", c => c.DateTime(nullable: false, precision: 0, storeType: "datetime2"));
AddPrimaryKey("dbo.NotifiedEvents", new[] { "BusinessSystemId", "CaseId", "Action", "Cycle", "EventNo", "EventDate", "DueDate" });
}
public override void Down()
{
DropPrimaryKey("dbo.NotifiedEvents");
DropColumn("dbo.NotifiedEvents", "DueDate");
AddPrimaryKey("dbo.NotifiedEvents", new[] { "BusinessSystemId", "CaseId", "Action", "Cycle", "EventNo", "EventDate" });
}
}