2012-10-04 15 views
7

के साथ डेटा डालने वाला कोड-फर्स्ट एंटिटी फ्रेमवर्क मैं अपनी परियोजना में कोड-प्रथम ईएफ का उपयोग कर रहा हूं और कस्टम आईडी वाले डेटा को डालने पर चेहरे की समस्या का सामना कर रहा हूं।कस्टम आईडी

जब मैं कस्टम आईडी (उदाहरण के लिए 99 9) के साथ डेटा डालने का प्रयास कर रहा हूं, तो ईएफ इसे अनदेखा करता है और तालिका में वृद्धि आईडी डालता है।

मेरे मॉडल:

public class Address 
{ 
     [Key] 
     public int Id { get; set; } 
     public string FirstName { get; set; } 
... 
} 

यह कैसे probleb हल करने के लिए?

संपादित करें:

1) कैसे एन से incrementing शुरू करने के लिए है, लेकिन 0 से नहीं?

2) यदि मैं कस्टम आईडी निर्दिष्ट नहीं करता हूं, तो डीबी को बढ़ाना होगा और खुद को सम्मिलित करना होगा। अगर मैं कस्टम आईडी निर्दिष्ट करता हूं, तो डीबी को इसे सम्मिलित करना होगा। क्या यह संभव है?

+0

आपको अपने कुल मेज से autoincrement समारोह को दूर करना चाहते हैं? –

+0

नहीं, मैं नहीं करता हूं। अगर मैं कस्टम आईडी निर्दिष्ट नहीं करता हूं, तो डीबी को बढ़ाना चाहिए और खुद को सम्मिलित करना चाहिए। अगर मैं कस्टम आईडी निर्दिष्ट करता हूं, तो डीबी को इसे सम्मिलित करना होगा। क्या यह संभव है? क्या एन से बढ़ाना शुरू करना संभव है, लेकिन 0 से नहीं? –

उत्तर

19

आप अपने वर्ग या fluentAPI

modelBuilder.Entity<Address>().Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
+1

उत्तर के लिए धन्यवाद। क्या यह डेटाबेस जेनरेटेडऑप्शन का उपयोग संभव है। AdWords और कस्टम आईडी डालने? –

+0

कोई भी ईएफ को इंगित नहीं करेगा कि आप चाहते हैं कि डेटाबेस आपके लिए आईडी उत्पन्न करे और ईएफ उस क्षेत्र पर आपके द्वारा निर्धारित किसी भी मूल्य को कर्तव्यपूर्वक अनदेखा कर दे। – JTMon

+0

स्पष्ट रूप से, धन्यवाद –

0

यह DbContext कक्षा में OnModelCreating में वास्तव में उपयोग करने के लिए कुंजी पर निम्न विशेषता

[Key, DatabaseGenerated(DatabaseGeneratedOption.None)] 

उपयोग कर सकते हैं। आप अनुक्रम संख्या सेट कर सकते हैं। जोड़कर से शुरू करने और incrementBy के रूप में आप को खुश DbContext class में निम्नलिखित करने के लिए कृपया यहां उदाहरण के लिए देखें: https://ef.readthedocs.io/en/staging/modeling/relational/sequences.html

class MyContext : DbContext 
    { 
     public DbSet<Order> Orders { get; set; } 

     protected override void OnModelCreating(ModelBuilder modelBuilder) 
     { 
      modelBuilder.HasSequence<int>("OrderNumbers", schema: "shared") 
       .StartsAt(1000) 
       .IncrementsBy(5); 

      //Once a sequence is introduced, you can use it to generate values for properties in your model. For example, you can use Default Values to insert the next value from the sequence. 
      modelBuilder.Entity<Order>() 
       .Property(o => o.OrderNo) 
       .HasDefaultValueSql("NEXT VALUE FOR shared.OrderNumbers"); 
     } 
    } 
संबंधित मुद्दे