5

मैं एंटिटी फ्रेमवर्क कोर के साथ खेल रहा हूं और मैं डेटाबेस-प्रथम एप्लिकेशन को लागू करने पर काम कर रहा हूं। प्रारंभिक स्काफोल्ड-डीबीकॉन्टेक्स्ट कमांड ठीक काम करता है और मेरी सभी इकाइयों को सही तरीके से बनाता है, अगर मैं चाहूं तो व्यवस्थित नहीं होता। यह एक SQL सर्वर डेटाबेस है जो जिम्मेदारी के क्षेत्रों को तोड़ने के लिए स्कीमा का उपयोग करता है और मुझे वास्तव में इस तथ्य की परवाह नहीं है कि मचान सिर्फ उन्हें एक ही फ़ोल्डर में फेंकता है।इकाई फ्रेमवर्क कोर डाटाबेस - प्रारंभिक मचान के बाद पहला अपडेट?

उस तरफ, मैं यह निर्धारित करने में असमर्थ हूं कि डेटाबेस अद्यतन के बाद कक्षाओं को अद्यतन करने के लिए स्काफोल्ड को फिर से चलाने का कोई तरीका है या नहीं। सबसे नज़दीकी मैं पावर पैरामीटर के साथ स्काफोल्ड-डीबीकॉन्टेक्स्ट कमांड को फिर से चला सकता हूं। हालांकि, यह Context.cs फ़ाइल में जोड़े गए किसी भी कस्टम कोड को भी ओवरराइट करता है, जैसे कनेक्शन स्ट्रिंग को हार्ड-कोडिंग के बजाय कॉन्फ़िगरेशन मान पर इंगित करना।

मैंने this one से जुड़े कुछ अन्य प्रश्नों को देखा है, लेकिन यह केवल प्रारंभिक मचान के बारे में बात करता है, और अधिक अपडेट नहीं।

क्या ऐसा करने के लिए भविष्य में किसी भी बदलाव को मैन्युअल रूप से कोड करने का कोई तरीका नहीं है? इसके बिना ऐसा लगता है कि ईएफ कोर के साथ डेटाबेस-पहला दृष्टिकोण पूरी तरह से बेकार है।

+0

में वर्णित अपने स्कीमा टिप्पणी आप इस जहां 'एकीकरण' की तरह कुछ का उपयोग करना चाहेंगे के लिए के आधार पर मॉडल बनाने के लिए करने के लिए प्रक्रिया स्कीमा का नाम है: डॉटनैट ef dbcontext मचान "<कनेक्शन स्ट्रिंग>" माइक्रोसॉफ्ट.इन्टिटीफ्रेमवर्ककोर। एससीएलसेवर-सी "इंटीग्रेशन कॉन्टेक्स्ट" - स्केमा "एकीकरण" -फ –

उत्तर

3

जैसा कि आपने स्वयं कहा था ... डेटाबेस के साथ मुख्य समस्या पहले दृष्टिकोण: आपको मॉडल को मैन्युअल रूप से कभी नहीं बदलना चाहिए और चीजों को नाम बदलने शुरू करना चाहिए। सिवाय इसके कि अगर आप 100% सुनिश्चित हैं कि आपका डेटाबेस अब और नहीं बदलेगा। यदि आप 100% निश्चित नहीं हैं, तो मॉडल के साथ कोड जो स्वत: जेनरेट किया गया है।

कभी भी मॉडल को कभी भी स्पर्श न करें, कम से कम, डेटाबेस में जो भी रहता है वह मॉडल में भी वही रहेगा। क्या बदल गया है ... मॉडल को भी बदल देगा।

लेकिन आपको लगता है कि ऑटो मानचित्रण द्वारा ओवरराइट नहीं होंगे आंशिक वर्गों बना सकते हैं:

public partial class TableName 
{ 
    public string Name_of_a_property 
    {get; set;} 
} 

यह अपने संस्था के लिए कोड जोड़ने के लिए है, जबकि यकीन है कि यह ऑटो से कोई असर नहीं होगा जा रहा है एक अच्छी छोटी रास्ता है मानचित्रण।

+1

बेशक, सोमवार होने के साथ, आंशिक कक्षाएं मेरे सिर में प्रवेश नहीं करतीं। मैंने थोड़ी देर के लिए ईएफ 5 का उपयोग करने के बाद ईएफ छोड़ दिया। उस दृष्टिकोण के बारे में पूरी तरह से भूल गए। यह काम करेगा। किसी भी डेटाबेस अद्यतन के बाद बस फिर से मचान करना याद रखना चाहिए। – BBlake

+0

मुझे समझ में नहीं आता कि यह कैसे मदद करता है। मुझे तुम पर विश्वास है। मुझे नहीं पता कि यह कैसे करना है। जब मैं पहली बार डेटाबेस से अपनी कक्षाएं उत्पन्न करता हूं, तो मैं आंशिक कक्षा कब और कहां करता हूं? फिर rescaffold? – johnny

+0

@johnny आप केवल अपनी परियोजना में एक नई कक्षा जोड़ सकते हैं, और अजीब बात यह है कि आंशिक वर्ग को नाम देने के समान ही नाम आपकी तालिका को एक-दूसरे को देखेगा, आप आंशिक कक्षा में कोड किए गए अतिरिक्त कार्यों का उपयोग कर सकते हैं। जबकि तालिका वर्ग फिर से मचान पर बदल सकता है, आंशिक वर्ग कभी नहीं होगा। आंशिक कक्षाओं में जितना चाहें उतना कोड, सीधे मॉडल कक्षाओं में नहीं। यह केवल डीबी के लिए ही जाता है।(मुझे आशा है कि यह बेहतर सेंस करे) –

1

री-रननेबल मचान का उपयोग वास्तविक डीबी के लिए पहला दृष्टिकोण answered by Antoine Pelletier के रूप में किया जा सकता है।

हालांकि अधिकांशतः मचान का उपयोग एक बार आपके कोड के मॉडल के प्रारंभिक आयात के लिए किया जाता है, और फिर कोड प्रथम दृष्टिकोण के साथ जारी रहता है। रिवर्स उपयोग इंजीनियरिंग एक इकाई की रूपरेखा के लिए एक मौजूदा डेटाबेस https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db

+0

हां, लेकिन ऐसा लगता है कि जब मैं ऐसा करता हूं तो मुझे लगता है कि (मुझे) सिरदर्द का कारण बनता है। मेरे पास एक ही विचार था, लेकिन मेरे अभ्यास में यह करना मुश्किल हो जाता है क्योंकि मुझे जाना है और context.cs के साथ-साथ मेरे जेनरेट किए गए वर्गों के साथ गड़बड़ करना शुरू करना है। कहें कि क्या मैं एक विदेशी कुंजी या कुछ जोड़ता हूं। – johnny

+0

@ जॉनी, कोड पहले मानते हैं कि आप संदर्भ और इकाई वर्गों को जेनरेट नहीं करते हैं, बल्कि मास्टर मॉडल के रूप में देखते हैं। आपके परिवर्तन कोड में किए जाएंगे, और फिर माइग्रेशन के माध्यम से डीबी पर लागू होंगे। हालांकि मैं सहमत हूं, कभी-कभी यह मुश्किल हो सकता है। आप कुछ एसक्यूएल परिवर्तनों के लिए एम्बेडेड स्क्रिप्ट चला सकते हैं, जैसे अतिरिक्त इंडेक्स जोड़ना –

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