2013-02-20 40 views
6

मूल रूप से एक ईएफ कोड पहले स्थापित किया गया था जो मौजूदा डेटाबेस से कनेक्ट हो रहा था। यह ठीक काम कर रहा था।ईएफ कोड पहले - डेटाबेस बनाना - उपयोगकर्ता के लिए लॉगिन विफल रहा

मैंने फिर एक पीओसीओ में कुछ बदलाव किए और कोड को पहले मेरे लिए नया डेटाबेस उत्पन्न करने का निर्णय लिया।

त्रुटि प्राप्त करना: लॉगिन द्वारा अनुरोध किया गया डेटाबेस \ "MyDatabase \" नहीं खोल सकता है। लॉगिन विफल रहा। \ R \ n उपयोगकर्ता 'DOMAIN \ username' के लिए लॉग इन विफल रहा।

मैं पुराने डेटाबेस हटा दिया है, लेकिन मैं कनेक्शन स्ट्रिंग परिवर्तन नहीं किया: मेरे स्थानीय मशीन पर

<add name="MyDatabaseContext" connectionString="Data Source=localhost;Initial Catalog=MyDatabase;Integrated Security=True;" providerName="System.Data.SqlClient" /> 

मैं एक एसक्यूएल सर्वर 2008 उदाहरण है और मेरे डोमेन उपयोगकर्ता नाम "सिस्टम प्रशासक" भूमिका में है।

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

विजुअल स्टूडियो 2012 और ईएफ 5 का उपयोग करना।

मुझे कोड पहले एक नया डेटाबेस उत्पन्न करने में सक्षम होना चाहिए। क्या हो रहा है?

उत्तर

8

पता चला कि मेरे डीबीकॉन्टेक्स्ट क्लास में एक स्थिर कंस्ट्रक्टर था, जो डेटाबेस प्रारंभकर्ता को ओवरराइड कर रहा था।

static MyDbContext() 
     { 
      Database.SetInitializer<MyDbContext>(null); 
     } 

कोड पहले रिवर्स इंजीनियर इसे इसमें डाल देंगे ताकि आप अपने मौजूदा डेटाबेस को ओवरराइट न करें। जब मैंने स्विच किया तो मैं इसके बारे में सोच नहीं रहा था।

आशा है कि यह किसी और की मदद करेगा।