2012-10-15 14 views
8

प्रारंभ नहीं करेगा मैं अपने एंटिटीफ्रेमवर्क/एमवीसी 4/डाटाबेस फर्स्ट प्रोजेक्ट में काम कर रहे एक सरल स्मारक परिदृश्य के साथ संघर्ष कर रहा हूं। मुझे पहले कोड के साथ काम करने के लिए बहुत सारे उदाहरण मिल गए हैं, लेकिन पहले डीबी के लिए कुछ नहीं।SimpleMembershipInitializer

समस्या मैं का सामना कर रहा हूँ है InitializeDatabaseConnection एक त्रुटि फेंक है ("अनुरोध किया .Net Framework डेटा प्रदाता खोजने में असमर्थ यह स्थापित नहीं किया जा सकता है।।") कोड इस तरह दिखता है:

WebSecurity.InitializeDatabaseConnection("DALEntities", "tblContacts1", "ContactID", "EMail", autoCreateTables: true); 

मुझे यकीन नहीं है कि डेटाप्रोवाइडर क्या विफल रहा है। यदि मैं InitializeDatabaseConnection कॉल में 'इन' का पता लगाने का प्रयास करता हूं, तो यह तुरंत त्रुटि को फेंक देता है।

मुझे क्या याद आ रही है?

जानकारी:
डेलेंटीज कनेक्शन का नाम है स्ट्रिंग जो बाकी ईएफ उपयोग करता है। निम्नलिखित कोड ठीक .... काम करता है

public ActionResult Test() { 
     using (var db = new DALEntities()) { 
      var query = from i in db.TBLINVENTORies 
          orderby i.ITEMNAME 
          select i; 
      var cnt = query.Count(); 
      string str = "Total Inventory: " + cnt; 
      return Content(str); 
     } 
    } 

web.config से मेरे संबंध तार अनुभाग:

<connectionStrings> 
    <add name="DALEntities" connectionString="metadata=res://*/DAL.DAL.csdl|res://*/DAL.DAL.ssdl|res://*/DAL.DAL.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SOMECOMPUTER;initial catalog=SOMEDB;persist security info=True;user id=SOMEID;password=SOMEPASS;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

इस पोस्ट में एक ही सवाल पूछने जा रहा है (लेकिन मॉडल के संदर्भ में पहला), लेकिन अभी तक कोई समाधान नहीं है: Using SimpleMembership with EF model-first

इसके अलावा, मुझे लगता है कि सहायता पाठ के साथ WebSecurity.InitializeDatabaseConnection() के लिए एक अधिभार है: Initializes the membership system ((blah blah <snip> ProviderName: the name of the ADO.NET data provider. If you want to use Microsoft SQL Server, the WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(String, String, String, String, Boolean) overload is recommended। मैं किसी MSSQL सर्वर से कनेक्ट करना चाहता हूं ... क्या इसकी आवश्यकता होगी?

+0

मेरी परियोजनाओं को ईएफ कनेक्शन स्ट्रिंग का उपयोग करना पसंद नहीं आया। इसके बजाय मुझे एक दूसरी कनेक्शन स्ट्रिंग जोड़नी पड़ी जो SQL कनेक्शन स्ट्रिंग (या एसक्यूएल कॉम्पैक्ट) थी। मैंने इसके साथ बहुत कुछ सोचा नहीं था इसलिए किसी और के पास बेहतर विचार हो सकता है – Eonasdan

+0

इसकी कोशिश करने लायक है ... लेकिन निश्चित रूप से एक अल्पकालिक कार्यवाही की तरह लगता है ... – reidLinden

+0

हाँ, जो त्रुटि को बाईपास करने के लिए काम करता था, लेकिन मैं नहीं करता ईएफ के लाभ के बिना मेरे ईएफ डेटाबेस से कनेक्ट करने के लिए शायद यह एक अच्छा विचार नहीं है ....? – reidLinden

उत्तर

7

प्रदाता आपको परेशानी दे रहा है वह आपके कनेक्शन स्ट्रिंग में निर्दिष्ट है जो System.Data.EntityClient है। मुझे संदेह है कि समस्या यह है क्योंकि आपकी परियोजना डेटाबेस-प्रथम है जबकि सरल सदस्यता कोड-पहले का उपयोग कर रही है। मुझे नहीं लगता कि आप इन दृष्टिकोणों को एक डेटाबेस में मिश्रित कर सकते हैं। IntializeDatabaseConnection के लिए DefaultConnection का उपयोग करने के लिए इसे वापस डालने का प्रयास करें। एमवीसी 4 मचान द्वारा उत्पन्न आपके web.config में एक डिफ़ॉल्ट कनेक्शन होना चाहिए था। यह कनेक्शन स्ट्रिंग आमतौर पर प्रदाता के रूप में System.Data.SqlClient का उपयोग करती है।

यदि आप डोमेन जानकारी (यानी DALENTities) को संग्रहीत करने के लिए उपयोग किए गए डेटाबेस में सरल सदस्यता रखना चाहते हैं तो आपको कोड पर पहले ईएफ का उपयोग करने के लिए अपनी विधि बदलने की आवश्यकता होगी। यदि आप अपना प्रोजेक्ट डेटाबेस रखना चाहते हैं-पहले आपको डेटाबेस में अपनी सदस्यता स्कीमा और develop custom member and role providers डिज़ाइन करने की आवश्यकता है। यदि आप वास्तव में अपने डोमेन मॉडल में उपयोगकर्ता की जानकारी को एकीकृत करने की कोशिश कर रहे हैं तो यह शायद सबसे अच्छा तरीका है।

+0

मैं आपके साथ 'System.Data.EntityClient' के बारे में सहमत हूं, लेकिन मुझे उपयोगकर्ता प्रबंधन के लिए अपने नियमित डेटाबेस के विरुद्ध काम करने की आवश्यकता है। मेरे लिए अलग-अलग डेटाबेस होने के लिए यह एक व्यावहारिक समाधान नहीं है। – reidLinden

+0

@reidLinden - मैंने आपकी टिप्पणियों के आधार पर अपना उत्तर अपडेट किया। –

+0

धन्यवाद। मैं समझता हूं कि आप क्या कह रहे हैं, और मुझे लगता है कि यह मेरे प्रश्न का पूर्ण जवाब देता है। – reidLinden

1

सादगी और स्पष्टता के लिए दो कनेक्शन स्ट्रिंग्स को उसी डेटाबेस पर इंगित करते रहें। ईएफ के लिए एक (कोई फर्क नहीं पड़ता कि कोड पहले या डेटा पहले) और आपकी वेब सुरक्षा सामग्री के लिए एक है। (चाड और एरिक के रूप में कहा)

<add name="DataEntities" connectionString="metadata=res://*/Models.DataEntities.csdl|res://*/Models.DataEntities.ssdl|res://*/Models.DataEntities.msl;provider=System.Data.SqlClient;provider connection string='data source=[YOUR_SERVER];initial catalog=[YOUR_DATABASE];integrated security=True;MultipleActiveResultSets=True;App=[YOUR_APP_NAME]'" providerName="System.Data.EntityClient" /> 
<add name="DataDB" connectionString="data source=[YOUR_SERVER];initial catalog=[YOUR_DATABASE];integrated security=True;MultipleActiveResultSets=True;App=[YOUR_APP_NAME]" providerName="System.Data.SqlClient" /> 

ध्यान दें कि प्रदाताओं अलग हैं: एफई System.data.EntityClient और गैर एफई एक System.Data.SqlClient का उपयोग करता है का उपयोग करता है।