Мы небольшая команда, которая использует Entity Framework в качестве нашей структуры объектно-реляционного отображения (ORM).Мы используем git в качестве управления исходным кодом, и в нашем последнем спринте произошли изменения в базе данных в двух отдельных ветках.Ничего необычного там нет.
Однако обычно мы можем получить правильный снимок модели, добавив пустую миграцию слиянием.
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" });
}
}