12

मुझे कोड-पहले मॉडल के साथ समस्या मिली है। डेटा अब डेटाबेस में है इसलिए मैं DropCreateDatabaseIfModelChanges क्लास का उपयोग कर डेटाबेस को फिर से बीज नहीं कर सकता, लेकिन मुझे एक टेबल बदलने की जरूरत है ताकि एक बड़ा कॉलम पहचान (1,1) न हो। मैंने एसएसएमएस का उपयोग करके ऐसा करने में कामयाब रहा है लेकिन अब मेरा ईएफ कोड कह रहा है कि यह पुराना है। इस सवाल में टेबल के लिए कोड है:इकाई फ्रेमवर्क 4.1 कोड-प्रथम कुंजी एट्रिब्यूट गैर-पहचान कॉलम

public class Vote { 
    [Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public long FacebookUserId { get; set; } 
    [Required] 
    public Entity Entity { get; set; } 
} 

तो मैं बदल दिया है मेरी मेज स्कीमा, और मेरे मॉडल (जो मैंने सोचा कि यह का प्रतिबिंब था, लेकिन मैं स्पष्ट रूप से गलत हूँ), लेकिन एफई अभी भी कह रहा है कि मेरा मॉडल पुराना है, और मैं इसे "परिपूर्ण" प्राप्त करने के लिए डेटाबेस को फिर से बीज नहीं दे सकता।

किसी भी मदद की बहुत सराहना की जाएगी।

धन्यवाद,

बेंजामिन

उत्तर

2

अपने OnModelCreating में जोड़ने का प्रयास करें:

modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 

कि अपवाद को निकाल देना चाहिए कि मॉडल पुराना हो चुका है लेकिन इस बार जब तक आप हमेशा मॉडल सिंक्रनाइज़ चाहिए और डेटाबेस मैन्युअल रूप से।

+0

जो त्रुटि को हटा देता है, लेकिन अब मुझे एक नई त्रुटि मिलती है, क्योंकि मेरे पास तालिका में मैप किया गया "एंटिटी" है और यह मुझे बता रहा है कि केवल आदिम प्रकारों की अनुमति है। क्या मुझे किसी बिंदु पर डेटाबेस को फिर से बीज करने की आवश्यकता है, और यदि ऐसा है, तो मैं अपने डेटा को नष्ट किए बिना इसे कैसे कर सकता हूं? (यदि पहले भाग का जवाब हां है तो मैं इसे एक नए प्रश्न में उड़ा दूंगा) –

+0

आपने अपने कोड में वास्तव में क्या बदल दिया। मैंने सोचा कि आपने केवल 'डेटाबेस जेनरेटेड' विशेषता को जोड़ा है लेकिन यह असमर्थित इकाई के बारे में शिकायत करता है। आपको डीबी को फिर से बीज करने की जरूरत नहीं है। –

+0

अलग तालिका, कुछ भी नहीं बदला, बस इसे फिर से बीज दिया और अभी भी यह त्रुटि हो रही है। –

4

this post की चर्चा करते हुए ...

ऐसा लगता है कि इकाई की रूपरेखा डिफ़ॉल्ट है कि आप पहचान स्तंभ में डालने से उम्मीद है।

हल करने के लिए ... इस

modelBuilder.Entity<BOB>() 
    .HasKey(p => p.Id) 
     .Property(p => p.Id) 
      .StoreGeneratedPattern = StoreGeneratedPattern.None; 

builder.Entity<BOB>().MapSingleType().ToTable("BOB"); 

कोशिश या साथ POCO में अपने प्रमुख को सजाने

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.None)] 
public Int64 PolicyID { get; set; } 
+1

बस स्पष्टीकरण के लिए: यह '[डेटाबेस जेनरेटेड (डेटाबेस जेनरेटेडऑप्शन नॉन)] होना चाहिए,' नहीं '[डेटाबेस जेनरेटेड (डाटाबेस जेनरेशनऑशन.None)] ' – z00l

9

डेटा एनोटेशन का उपयोग करना:

public class Customer 
{ 
[Key] 

    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int CustomerID { get; set; } 
} 

धाराप्रवाह API का उपयोग करना :

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Customer>().Property(c => c.CustomerID).HasDatabaseGeneratedOption(null); 
    base.OnModelCreating(modelBuilder); 
} 
संबंधित मुद्दे