मैं कोड पहले दृष्टिकोण के साथ एमवीसी 3 का उपयोग कर रहा हूं। इस मामले में, मुझे मौजूदा डेटाबेस से अपनी इकाई वर्ग उत्पन्न करना पड़ा।
डेटाबेस था
डेटाबेस1.mdf
एक बार जब मैंने ऐसा किया, तो इसने DBEntities बनाया और मेरे Web.config में एक नया कनेक्शनस्ट्रिंग जोड़ा जो कुछ इस तरह दिखता था:
<add name="DATABASE1Entities" connectionString="metadata=res://*/Models.Task.csdl|res://*/Models.Task.ssdl|res://*/Models.Task.msl;provider=System.Data.SqlClient;provider connection string="data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\DATABASE1.MDF;integrated security=True;user instance=True;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
अब मैंने डीबी इकाइयों को हटा दिया और अपनी डीबी संदर्भ कक्षा के साथ आया।
तथा
अब, मैं निम्नलिखित कनेक्शनस्ट्रिंग के साथ काम कर रहा हूं:
<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|DATABASE1.mdf;User Instance=true" providerName="System.Data.SqlClient" />
मेरे डीबीकॉन्टेक्स्ट क्लास का नाम टास्ककॉन्टेक्स्ट है।
मुझे यकीन नहीं है कि इसके बाद क्या हुआ। मेरा कोड काम करता है। लेकिन यह कुछ खाली डेटाबेस पर काम करता है और यह डेटाबेस.mdf में किसी भी डेटा को प्रतिबिंबित नहीं करता है। अगर मैं अपने कंट्रोलर का उपयोग करके कुछ जोड़ता हूं तो मैं देखता हूं कि वह चीज जुड़ गई है। लेकिन यह Databse1.mdf में परिलक्षित नहीं होता है।
ऐसा लगता है कि उसने अपना खुद का डेटाबेस बनाया है। लेकिन मुझे कहीं भी एंडी .sdf या .mdf फ़ाइल नहीं दिखाई दे रही है.... मुझे नहीं पता कि क्या हो रहा है?
2 जवाब
अपनी कनेक्शन स्ट्रिंग का नाम TaskContext
के समान बनाएं:
<add name="TaskContext"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|DATABASE1.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
या, आप इन चरणों का पालन करके अपने पसंदीदा connectionStringName का उपयोग कर सकते हैं:
1- जब आप कोई TaskContext
ऑब्जेक्ट बना रहे होते हैं, तो उसका कनेक्शनस्ट्रिंग बदल जाता है:
var cn = WebConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
// or
var cn = WebConfigurationManager.ConnectionStrings[0].ConnectionString; // use your connection index instead of 0
var _context = new TaskContext();
_context.Database.Connection.ConnectionString = cn;
2- अपने संदर्भ वर्ग (TaskContext
) में, आपको modelBuilder को बताना चाहिए कि हटाएं IncludeMetadataConvention
इस कोड द्वारा:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
base.OnModelCreating(modelBuilder);
}
अपनी कनेक्शन स्ट्रिंग और DBContext का नाम समान बनाने का प्रयास करें। मेरा मानना है कि किसी बिंदु पर पढ़ना है कि ईएफ कोड पहले बहुत सारे सम्मेलनों को नियोजित करता है, इसलिए यदि उसे डीबी संदर्भ (आपके मामले में "टास्ककॉन्टेक्स्ट") नामक कनेक्शन स्ट्रिंग नहीं मिलती है तो यह SQLExpress से कनेक्ट करने का प्रयास करेगा (चाहे या नहीं) एक स्थापित है) और डेटाबेस को खोजने या बनाने का प्रयास करेगा।
मुझे लगता है कि आपको SQLExpress स्थापित हो गया है। C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\
में क्या कमी है? (मुझे लगता है कि यही रास्ता है) क्या आपके पास इस परियोजना के लिए एक डीबी बैठा है? शायद कुछ ऐसा [YourNamespace].TaskContext.dbf?
संबंधित सवाल
नए सवाल
asp.net
ASP.NET एक Microsoft वेब अनुप्रयोग विकास ढांचा है जो प्रोग्रामर को गतिशील वेब साइटों, वेब अनुप्रयोगों और वेब सेवाओं के निर्माण की अनुमति देता है। प्रोजेक्ट प्रकार टैग के साथ संयोजन के रूप में इस टैग का उपयोग करना उपयोगी है। [asp.net-mvc], [asp.net-webforms], या [asp.net-web-api]। ASP.NET Core के बारे में प्रश्नों के लिए इस टैग का उपयोग न करें - इसके बजाय [asp.net-core] का उपयोग करें।