हम एक छोटी टीम हैं जो हमारे ऑब्जेक्ट-रिलेशनल मैपिंग (ओआरएम) ढांचे के रूप में एंटिटी फ्रेमवर्क का उपयोग करती है। हम स्रोत नियंत्रण के रूप में गिट का उपयोग करते हैं और हमारे नवीनतम स्प्रिंट में हमने दो अलग-अलग शाखाओं में डेटाबेस परिवर्तन किए हैं। वहां कुछ भी असाधारण नहीं है।

हालांकि हम आमतौर पर एक खाली "मर्ज" माइग्रेशन जोड़कर एक सही मॉडल स्नैपशॉट प्राप्त कर सकते हैं।

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

यदि मैं मॉडल में ड्यूडेट कुंजी फिर से जोड़ता हूं तो इकाई ढांचा मौजूदा कुंजी को डेटाबेस में फिर से जोड़ने का प्रयास करता है।

[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
Ogglas 21 सितंबर 2018, 18:34

1 उत्तर

सबसे बढ़िया उत्तर

माइग्रेशन अभी भी था लेकिन एक विरोध के दौरान प्रोजेक्ट .csproj में माइग्रेशन शामिल नहीं था। जब माइग्रेशन को फिर से शामिल किया गया तो सब कुछ काम करने लगा।

1
Ogglas 21 सितंबर 2018, 18:42