2013-01-11 19 views
8

बनाने के लिए हम अपने मचान सर्वर के पर के लिए एक सरल ASP.NET MVC आवेदन की तैनाती कर रहे हैं और हम निम्न त्रुटि हो रही है जब EntityFramework मौजूदा डेटाबेस विस्थापित करने की कोशिश करता है की कोशिश करता है।EntityFramework माइग्रेशन एक मौजूदा डेटाबेस

CREATE DATABASE permission denied in database 'master'. 

स्थिति इस प्रकार है:

  • यह पहली बार माइग्रेशन चलाने है।
  • डेटाबेस पहले से मौजूद है (यह वास्तव में एक एम्म्ब्राको डेटाबेस है)।

यह निम्न विधि (EntityFramework से) प्रकट होता झूठी देता है, जब यह स्पष्ट रूप से सच लौटना चाहिए:

System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists() 

डेटाबेस प्रारंभकर्ता निम्नलिखित कोड है:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<DataContext, Configuration>()); 

स्वत: माइग्रेशन बंद कर दिया गया है, क्योंकि हम कोड-आधारित माइग्रेशन का उपयोग कर रहे हैं।

सही डेटाबेस और उपयोगकर्ता के लिए connectionstring अंक कि डेटाबेस पर db_owner अधिकार है। उपयोगकर्ता को सर्वर पर अन्य तालिकाओं का कोई अधिकार नहीं है।

क्या यह एक आम समस्या है? क्या किसी के लिए इसका समाधान पता है?

Thnx!

+1

आप इसे स्थापित करने के गुरु नहीं होने के लिए के रूप में है कि एक प्रणाली डेटाबेस के नाम है और मुद्दों के –

+0

संभव डुप्लिकेट का कारण बन सकता कोशिश कर सकते निष्पादित करने में सक्षम है [डाटाबेस 'मास्टर' एंटिटी फ्रेमवर्क माइग्रेशन] में डाटाबेस अनुमति को अस्वीकार कर दिया गया है (http://stackoverflow.com/questions/11814762/create-database-permission-denied-in-डेटा-master-entity-framework-migratio) –

+0

डेटाबेस कनेक्शनस्ट्रिंग में नाम मास्टर नहीं है (क्योंकि यह वास्तव में एक सिस्टम डेटाबेस है)। यह एक मौजूदा डेटाबेस है और उपयोगकर्ता को केवल उस डीबी के अधिकार हैं। EntityFramework डेटाबेस बनाने का प्रयास करता है क्योंकि EnsureDatabaseExists रिपोर्ट करता है कि कोई डेटाबेस नहीं है। उसके बाद ईएफ डीबी बनाने की कोशिश करता है, लेकिन उपयोगकर्ता के पास इसके लिए कोई अधिकार नहीं है। हालांकि, यह समस्या नहीं है। ईएफ यह पता लगाने में विफल रहता है कि डीबी वास्तव में कुछ कारणों से मौजूद है –

उत्तर

1

डेटाबेस मौजूद है सुनिश्चित करें - निम्न स्क्रिप्ट

IF db_id(N'MyDatabaseName') IS NOT NULL SELECT 1 ELSE SELECT Count(*) FROM sys.databases WHERE [name]=N'MyDatabaseName' 

कि डीबी के की एक सूची के लिए 'sys.databases' क्वेरी करने के लिए उपयोगकर्ताओं की अनुमति मान लिया गया निष्पादित करता है। यदि यह क्वेरी विफल हो जाती है - EF सोचता है कि डीबी नहीं बनाया गया है और इसे फिर से बनाने का प्रयास करता है।

सुनिश्चित करें - कि उपयोगकर्ता माइग्रेशन को क्रियान्वित करने, क्वेरी ऊपर सफलतापूर्वक

+0

उपयोगी, लेकिन आप इसे कैसे समझ गए? और दूसरी बात - क्या हम इसे रोकने के लिए ईएफ प्राप्त कर सकते हैं, यह एक सुरक्षित वातावरण के लिए उपयुक्त नहीं है :) –

+0

यह पता लगाना - एचएम .. मानक एसक्यूएल डेटाबेस से एसक्यूएल का एक टुकड़ा इस्तेमाल करता है, जो एसएसएमएस उत्पन्न करता है। और हम डेटाबेस बनाने की कोशिश से ईएफ को कैसे रोक सकते हैं? मैं सोचता हूँ हा। बॉक्स से बाहर आने वाले डिफ़ॉल्ट कार्यान्वयन पर भरोसा करने के बजाय बस एक कस्टम डीबी प्रारंभकर्ता बनाएं – Marty

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