代码之家  ›  专栏  ›  技术社区  ›  Ogglas

实体框架代码优先数据库未与模型同步

  •  1
  • Ogglas  · 技术社区  · 6 年前

    但是,我们通常可以通过添加一个空白的“合并”迁移来获得正确的模型快照。

    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 回复  |  直到 6 年前
        1
  •  1
  •   Ogglas    6 年前

    .csproj 没有包括移民。当迁移再次包含进来时,一切都开始工作了。