2012-06-19 12 views
7

विफल रहता है मैं ईएफ 4.3.1 कोड प्रथम माइग्रेशन का उपयोग कर रहा हूं। मेरे पास एक सारणी है:ईएफ माइग्रेशन: 2 कॉलम पीके से एकल कॉलम तक तालिका ले जाएं डीआरओपी से पहले और

public class Product 
{ 
    [Key] 
    [Column(Order=0)] 
    [MaxLength(100)] 
    public string Store { get; set; } 

    [Key] 
    [Column(Order=1)] 
    [MaxLength(100)] 
    public string Sku { get; set; } 
}​ 

मेरे पास उपरोक्त कोड के साथ बनाई गई एक मौजूदा तालिका है।

public class Product 
{ 
    [MaxLength(100)] 
    public string Store { get; set; } 

    [Key] 
    [MaxLength(100)] 
    public string Sku { get; set; } 
}​ 

इस कारण एफई अगले स्वचालित माइग्रेशन में विफल, शिकायत: मैं तो एक एकल-स्तंभ प्राथमिक कुंजी में स्थानांतरित कर दिया

ALTER तालिका [उत्पाद] परिवर्तन स्तंभ [स्टोर] nvarchar

ऑब्जेक्ट 'पीके_Product' कॉलम 'स्टोर' पर निर्भर है। ALTER तालिका ALTER COLUMN स्टोर विफल रहा क्योंकि एक या अधिक ऑब्जेक्ट्स इस कॉलम तक पहुंचते हैं।

जाहिर PK_Product इस ALTER बयान आग प्रयास करने से पहले गिरा दिया करने की आवश्यकता है (कारण है कि यह बिल्कुल स्तंभ फेरबदल कर रहा है?), लेकिन इसके बजाय प्रवास विफल रहता है।

क्या मैं कुछ गलत कर रहा हूं या यह एक बग है? समाधान?

उत्तर

13

आप स्वचालित माइग्रेशन के साथ ऐसा करने में सक्षम नहीं होंगे। आपको Add-Migration का उपयोग करके माइग्रेशन बनाना होगा और फिर इसे बदलना होगा ताकि यह केवल पीके को संशोधित कर सके।

public partial class TheMigration : DbMigration 
{ 
    public override void Up() 
    { 
     DropPrimaryKey("Products", new[] { "Store", "Sku" }); 
     AddPrimaryKey("Products", "Sku"); 
    } 

    public override void Down() 
    { 
     DropPrimaryKey("Products", new[] { "Sku" }); 
     AddPrimaryKey("Products", new[] { "Store", "Sku" }); 
    } 
} 

एफई स्तंभ फेरबदल कर रहा है, क्योंकि जब यह एक Key का हिस्सा है, यह परोक्ष है NOT NULL:

प्रवास के रूप में सरल हो सकता है। आप इसे छोड़ सकते हैं, [Required] विशेषता जोड़ें, या पीएफ को छोड़कर के बाद कॉलम को बदलने के लिए ईएफ को अनुमति दें।

+0

एड-माइग्रेशन उपरोक्त आदेशों (और अधिक) को पूर्वनिर्धारित करता है। यह पता चला कि वे आसानी से आदेश से बाहर थे - ड्रॉपप्रिमरीकी को ले जाकर जैसा कि आप कॉलम परिवर्तन से पहले यहां ऊपर हैं, इसे हल किया गया था। तो अंतिम प्रवास को स्पष्ट करने के लिए DropPrimaryKey, AlterColumn, AddPrimaryKey चला गया। मुझे लगता है कि यह एक अंतर्निहित सीमा के बजाय, समाधान की सादगी दी गई माइग्रेशन में एक बग है। –

+0

यूप, इसलिए मेरा ** बोल्ड ** "बाद" में :-) –

संबंधित मुद्दे