Первая база данных Entity Framework не синхронизирована с моделями - PullRequest
0 голосов
/ 21 сентября 2018

Мы небольшая команда, которая использует 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; }
}

Однако в базе данных имеется составной первичный ключ из шести столбцов.Я знаю, что это было отредактировано, но я не могу найти миграцию для этого сейчас.

enter image description here

Когда я пытаюсь создать новую миграцию, она выглядит следующим образом:

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

1 Ответ

0 голосов
/ 21 сентября 2018

Миграция все еще была там, но во время конфликта проекты .csproj не включали миграцию.Когда миграция была включена снова, все начало работать.

...