2013-07-30 10 views
9

के साथ विरोध हुआ मैं इन कक्षाओंएफई माइग्रेशन: परिवर्तन तालिका कथन विदेशी कुंजी बाधा

public class Bid : ... 
{ 
    ... 

    [Required] 
    public virtual TraderUser Trader { get; set; } 
} 

public class TraderUser : ... 
{ 
    ... 
} 

मैं तो निम्नलिखित तरीके से इन कक्षाओं में बदल गया था और एक नया वर्ग जोड़ा

public class Bid : ... 
{ 
    ... 

    [Required] 
    public virtual TraderUser TraderUser { get; set; } 
} 

public class TraderUser : ... 
{ 
    ... 

    public int TraderCompanyId { get; set; } 

    [ForeignKey("TraderCompanyId")] 
    public virtual TraderCompany TraderCompany { get; set; } 
} 

public class TraderCompany : ... 
{ 
    ... 
} 

जब मैं अद्यतन-डेटाबेस मुझे निम्न त्रुटि मिली

ALTER TA बीएलई कथन विदेशी कुंजी बाधा "FK_dbo.Bid_dbo.TraderUser_TraderUser_Id" से विवादित है। संघर्ष डेटाबेस "लीज़प्लान। विकास", तालिका "dbo.TraderUser", कॉलम 'आईडी' में हुआ।

मुझे अद्यतन करने के लिए डेटाबेस नहीं मिल सकता है। किसी भी प्रकार की मदद की बेहद सराहना की जाती है।

+0

आप इन 3 कक्षाओं के बीच क्या रिश्तों को पूरा करने की कोशिश कर रहे हैं? और क्या 'ट्रेडर कॉम्पनी' कक्षा में कोई गुण है? – SOfanatic

+0

बोली में एक व्यापारी उपयोगकर्ता होता है और एक व्यापारी उपयोगकर्ता की एक व्यापारी कंपनी होती है। TraderCompany में केवल कुछ स्ट्रिंग गुण हैं। –

उत्तर

24

पता नहीं है कि यह बहुत देर हो चुकी है, लेकिन मुझे एक ही समस्या थी और शायद यह आपकी मदद कर सकती है।

मैं आपकी पोस्ट से नहीं देख सकता, लेकिन शायद आपकी ट्रेडर यूज़र तालिका में कुछ पंक्तियां पहले से डाली गई हैं। जो आप पूरा करने की कोशिश कर रहे हैं वह नई टेबल TraderCompany बनाने और TraderUser में विदेशी कुंजी संबंध बनाने के लिए है जो TraderCompany तालिका को इंगित करता है।

एक माइग्रेशन में आप तालिका के लिए गैर-शून्य विदेशी विदेशी संबंध बनाने की कोशिश कर रहे हैं जिसमें पहले से डेटा शामिल है।

आप निम्न की कोशिश कर सकते:

  • पहले माइग्रेशन -, सब कुछ एक ही इस लाइन को छोड़कर

    public int TraderCompanyId { get; set; } 
    

    होना चाहिए

    public int? TraderCompanyId { get; set; } 
    

    यह आपको नल बनाने के लिए अनुमति देगा विदेशी कुंजी कॉलम।

  • TraderCompany तालिका से कुछ पंक्ति के साथ मौजूदा डेटा के लिए अपने TraderCompanyId कॉलम को अपडेट करें।

  • दूसरा प्रवास - कोड

    public int? TraderCompanyId { get; set; } 
    

    से

    public int TraderCompanyId { get; set; } 
    

    और अपने माइग्रेशन चलाने के लिए बदलें।

मुझे आशा है कि यह आपकी मदद करेगा।

0

वैकल्पिक कुंजी जोड़ने से पहले एक पंक्ति डालने के लिए माइग्रेशन कोड के भीतर एक SQL कथन जोड़ने का विकल्प है। यहां मैंने जो किया है उसका एक उदाहरण यहां दिया गया है:

 // Countries is a new table 
     CreateTable(
      "dbo.Countries", 
      c => new 
       { 
        CountryID = c.Int(nullable: false, identity: true), 
        Name = c.String(), 
        Currency = c.Int(nullable: false), 
       }) 
      .PrimaryKey(t => t.CountryID); 
     // Heres where i insert a row into countries 
     Sql("INSERT INTO Countries (Name, Currency) VALUES ('United Kingdom', 0)"); 
     // I set the default value to 1 on the ID fields 
     AddColumn("dbo.Brokers", "CountryID", c => c.Int(nullable: false, defaultValue: 1)); 
     AddColumn("dbo.Products", "CountryID", c => c.Int(nullable: false, defaultValue: 1)); 
     AddForeignKey("dbo.Brokers", "CountryID", "dbo.Countries", "CountryID", cascadeDelete: false); 
     AddForeignKey("dbo.Products", "CountryID", "dbo.Countries", "CountryID", cascadeDelete: false); 
     // Migrations then creates index's 
     CreateIndex("dbo.Brokers", "CountryID"); 
     CreateIndex("dbo.Products", "CountryID"); 
संबंधित मुद्दे