6

इकाई की रूपरेखा के साथ डेटा बोने मैं codefirst और SQL सर्वर एक्सप्रेस 2012कैसे जब codefirst

मैं माइग्रेशन सक्षम किया है, साथ इकाई की रूपरेखा 5 का उपयोग कर एक asp.net mvc4 साइट बनाने रहा प्राथमिक कुंजी मान नियंत्रित करने के लिए और अब में ऐसा मेरा कॉन्फ़िगरेशन। सईड विधि: (ध्यान दें कि मैं प्राथमिक कुंजी को 8 पर सेट करना चाहता हूं, भले ही यह डेटाबेस में पहला रिकॉर्ड है)।

context.ProductCategoryDtoes.AddOrUpdate(x => x.Id, 
    new ProductCategoryDto() { Id = 8, Name = "category1" } 
); 

मेरे मॉडल वस्तु इस तरह परिभाषित किया गया है:

[Table("ProductCategory")] 
public class ProductCategoryDto { 
    public long Id { get; set; } 
    public string Name { get; set; } 
} 

यह (SQL सर्वर एक्सप्रेस 2012) जहां ईद स्तंभ पहचान = true, पहचान बीज = 1 है में एक तालिका में परिणाम है, पहचान वेतन वृद्धि = 1.

अब जब मैं एक PM> Update-Database आईडी = 1.

तो मेरे सवाल कर रहे हैं के साथ एक पंक्ति में इस परिणाम करके माइग्रेशन चलाने:

1) डेटा बीजिंग करते समय मैं ऑटो वृद्धिशील प्राथमिक कुंजी के मूल्यों को कैसे नियंत्रित कर सकता हूं।

2) यदि समाधान कुंजी कॉलम बीज मान बढ़ाने के लिए है, तो यह Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>()); का उपयोग कर रहा है, तो यह कैसे किया जाना है। जब भी मैं डेटाबेस अद्यतन करता हूं, यह डेटाबेस को नूक और पुनर्निर्माण करेगा, तो ताजा डेटाबेस में बीज मूल्य को कैसे अपडेट किया जाएगा?

उत्तर

2

बस, मूलभूत मूल्यों के साथ डमी संस्थाओं बनाने तो dummies अपने वास्तविक डेटा जोड़ने और बाद में हटा दें:

+0

हाँ तुलना में एक और बीज में शुरू, कि मैं क्या कर रहा समाप्त हो गया था। –

0

यह आप एक पहचान स्तंभ का उद्देश्य विफल करने के लिए कोशिश कर रहे हैं लगता है। यदि आप ऐसा करना चाहते हैं तो आप एकमात्र विकल्प एसक्यूएल कमांड Set IDENTITY_INSERT का उपयोग करना चाहते हैं ताकि आप मूल्य डालने की अनुमति दे सकें और फिर बीज अपडेट करने के लिए DBCC CHECKIDENT चलाएं। वास्तव में एक अच्छा विचार नहीं है। इन विकल्पों में सुरक्षा और प्रदर्शन सीमाएं हैं।

आप इसके बजाय किसी GUID उपयोग करने पर विचार कर सकते हैं। आप कोड में GUID बना सकते हैं जो अद्वितीय होने की गारंटी है, और आप SQL में GUID को कॉलम डिफ़ॉल्ट के रूप में भी उत्पन्न कर सकते हैं।

GUID के साथ, जो अनुक्रमिक हैं, आपको एक अच्छी अनुक्रमण रणनीति के माध्यम से सोचने की आवश्यकता होगी। यह दृष्टिकोण भी बहस योग्य है।

अंततः, यह की तरह आप एक अलग एक पहचान कॉलम का उपयोग कर के अलावा अन्य रणनीति की जरूरत है लग रहा है।

[DatabaseGenerated(DatabaseGeneratedOption.None)] 
public long Id { get; set; } 
+0

मैं क्योंकि मैं Sql सर्वर –

1

आप अपने आईडी संपत्ति की चोटी पर इस जोड़ने की कोशिश की है। नहीं सबसे अच्छा तरीका है, लेकिन मुझे लगता है कि कोई अन्य ...

+0

नहीं करने के लिए एक MySql डेटाबेस से डेटा ओर पलायन कर रहा हूँ ईद नियंत्रित करना चाहते हैं, लेकिन यह मुझे helpt नहीं करेगा, क्योंकि मैं अभी भी पहचान (ऑटो वेतन वृद्धि) का उपयोग करना चाहते हैं, मैं तो बस करना चाहते हैं 0. –

0

यह बहुत hackish है, लेकिन जहां मैं कुछ हार्ड-कोडेड पी मूल्यों होने की रिपोर्ट की वजह से यह करना ही था मैं एक परिदृश्य में फंस गयी। रिपोर्ट को ठीक करना मेरे काम के दायरे से बाहर था।

Context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.ProductCategoryDto ON " + 
    "INSERT INTO dbo.ProductCategoryDto (Id, Name) VALUES (8, 'category1') " + 
    "SET IDENTITY_INSERT dbo.ProductCategoryDto OFF"); 
संबंधित मुद्दे