entity framework ADO.NET प्रदाता के लिए invariant name 'System.Data.SqlClient' के साथ कोई इकाई फ्रेमवर्क प्रदाता नहीं मिला




entity-framework (24)

NUget द्वारा EF6 डाउनलोड करने के बाद और मेरी प्रोजेक्ट को चलाने का प्रयास करें, यह निम्न त्रुटि देता है:

ADO.NET प्रदाता के लिए invariant name 'System.Data.SqlClient' के साथ कोई इकाई फ्रेमवर्क प्रदाता नहीं मिला। सुनिश्चित करें कि प्रदाता अनुप्रयोग कॉन्फ़िगरेशन फ़ाइल के 'entityFramework' अनुभाग में पंजीकृत है। अधिक जानकारी के लिए http://go.microsoft.com/fwlink/?LinkId=260882 देखें।


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


आपको EntityFramework.SqlServer.dll असेंबली के लिए एक स्थिर संदर्भ को मजबूर करना चाहिए, लेकिन एक डमी कोड डालने की बजाय, आप इसे और अधिक सुंदर तरीके से कर सकते हैं:

  1. यदि आपके पास पहले से ही डीबी कॉन्फ़िगरेशन क्लास है:

    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance);
        }
    }
    
  2. यदि आपके पास डीबी कॉन्फ़िगरेशन क्लास नहीं है तो आपको एप स्टार्टअप पर निम्नलिखित कोड डालना होगा (ईएफ का उपयोग करने से पहले):

    static MyContext()
    {
        DbConfiguration.Loaded += (sender, e) =>
            e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);
    }
    

मेरे पास एक कंसोल एप्लिकेशन और क्लास लाइब्रेरी थी। कक्षा पुस्तकालय में मैंने इकाई डेटा मॉडल बनाया (क्लास लाइब्रेरी> जोड़ें> नया आइटम> डेटा> ADO.NET इकाई डेटा मॉडल 6.0 पर राइट क्लिक करें) और कंसोल एप्लिकेशन के अंदर संदर्भ डालें। तो, आपके पास कंसोल एप्लिकेशन है जिसमें कक्षा पुस्तकालय और अंदरूनी कक्षा पुस्तकालय के संदर्भ में आपके पास ईएफ मॉडल है। जब मैंने टेबल से कुछ रिकॉर्ड प्राप्त करने का प्रयास किया तो मुझे वही त्रुटि मिली।

मैंने इन चरणों का पालन करके इस मुद्दे को हल किया:

  1. समाधान पर राइट क्लिक करें और 'समाधान के लिए NuGet पैकेज प्रबंधित करें' विकल्प चुनें और NuGet पैकेज प्रबंधक विंडो दिखाई देगी।
  2. 'इंस्टॉल किए गए पैकेज' के तहत 'प्रबंधित करें' विकल्प पर जाएं टीआईपी: इकाई फ्रेमवर्क क्लास लाइब्रेरी में जोड़ा जाता है, इसलिए आपके पास 'इंस्टॉल किए गए पैकेज' के तहत EntityFramework होगा और आपको 'Manage'option' दिखाई देगा
  3. 'प्रबंधित करें' विकल्प पर क्लिक करें और प्रोजेक्ट में पैकेज स्थापित करने के लिए जांचें जिसमें क्लास लाइब्रेरी का संदर्भ है जिसमें ईएफ मॉडल है (मेरे मामले में मैंने कंसोल ऐप में पैकेज इंस्टॉल करने के लिए चेक बॉक्स सेट किया है जिसमें क्लास लाइब्रेरी का संदर्भ था जिसमें ईएफ मॉडल था)

मुझे बस इतना करना था और सबकुछ सही काम करता था।

मुझे आशा है कि इससे मदद मिलेगी।


YourModel.edmx फ़ाइल का विस्तार करें और YourModel.Context.cs क्लास को YourModel.Context.tt के अंतर्गत खोलें।

मैंने उपयोग खंड में निम्न पंक्ति जोड़ा और त्रुटि मेरे लिए तय की गई थी।

SqlProviderServices = System.Data.Entity.SqlServer.SqlProvider सेवा का उपयोग कर;

जब भी फ़ाइल स्वत: जेनरेट की जाती है तो आपको फ़ाइल में इस लाइन को जोड़ना पड़ सकता है।


यदि आप "EntityFramework.SqlServer.dll" को शामिल करना भूल जाते हैं तो आप यह संदेश भी देख सकते हैं

यह ईएफ 6 में एक नई जोड़ा फ़ाइल प्रतीत होता है। प्रारंभ में मैंने इसे अपने मर्ज मॉड्यूल में शामिल नहीं किया था और यहां सूचीबद्ध समस्या में भाग लिया था।


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


Azure पर एक सीई डीबी से एसक्यूएल सर्वर से माइग्रेट करते समय मुझे एक संबंधित समस्या थी। इसे हल करने की कोशिश कर रहे 4 घंटे बर्बाद हो गए। उम्मीद है कि यह किसी को भी एक समान भाग्य बचा सकता है। मेरे लिए, मेरे पास संकुल.कॉन्फिग फ़ाइल में एसक्लसी का संदर्भ था। इसे हटाने से मेरा पूरा मुद्दा हल हो गया और मुझे माइग्रेशन का उपयोग करने की अनुमति मिली। वाई माइक्रोसॉफ्ट अनावश्यक रूप से जटिल सेटअप और कॉन्फ़िगरेशन मुद्दों के साथ एक और तकनीक के लिए।


मेरे पास एक ही समस्या थी, मैंने प्रोजेक्ट से ऐप कॉन्फ़िगर फ़ाइल की प्रतिलिपि बनाई जिसमें मेरे परीक्षण प्रोजेक्ट में डीबीसीएन्टेक्स्ट था


मुझे भी एक ही समस्या थी। मेरी समस्या को निम्नलिखित करके हल किया गया था:


हर किसी को मुझे आपकी ध्यान देने की ज़रूरत है कि दो डीएलटी EntityFramework.dll और EntityFramework.SqlServer.dll डेटाएप लेयर लाइब्रेरी हैं और इन्हें देखने या किसी अन्य परत में उपयोग करने के लिए तार्किक नहीं है। यह आपकी समस्या हल करता है लेकिन यह तार्किक नहीं है।

तार्किक तरीका यह है कि enitiess विशेषता उन्हें फ़्लुएंट एपीआई के साथ हटा दें और बदलें। यह वास्तविक समाधान है


आपने क्लास लाइब्रेरी प्रोजेक्ट में ईएफ जोड़ा है। आपको इसे उस प्रोजेक्ट में जोड़ने की भी आवश्यकता है जो इसका संदर्भ देता है (आपका कंसोल ऐप, वेबसाइट या जो भी हो)।


प्रोजेक्ट होस्ट करने के लिए EntityFramework.SqlServer जोड़ने के बजाय आप इस तरह के मॉडल / इकाई प्रोजेक्ट से इसके लिए एक स्थिर संदर्भ सुनिश्चित कर सकते हैं

static MyContext()
{
    var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
    if(type == null)
        throw new Exception("Do not remove, ensures static reference to System.Data.Entity.SqlServer");
}

इससे बिल्ड प्रक्रिया में होस्ट प्रोजेक्ट के साथ असेंबली शामिल होगी।

मेरे ब्लॉग पर अधिक जानकारी http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/ निर्भरता- http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/ copy- http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/ fails- http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/ copy http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/


जैसा कि संदेश दिखाता है कि हमें प्रदाता System.Data.SqlClient जोड़ने की आवश्यकता है, यही कारण है कि हमें एंटीटीफ्रेमवर्क के nuget पैकेज को स्थापित करने की आवश्यकता है जिसमें दो डीएल हैं लेकिन यदि हम केवल कंसोल एप्लिकेशन विकसित कर रहे हैं तो हमें केवल EntityFramework.SqlServer.dll का संदर्भ जोड़ना होगा।


वेब सेवाओं के एक सेट के साथ काम करते समय, विभिन्न परियोजनाओं में से प्रत्येक, और उन सेवाओं में से कुछ के लिए एकीकरण परीक्षण युक्त एक अलग परियोजना के साथ काम करते समय आज इस समस्या में भाग लें।

मैं ईएफ 5 के साथ कुछ समय के लिए इस सेटअप का उपयोग कर रहा हूं, इंटीग्रेशन टेस्ट प्रोजेक्ट से ईएफ के संदर्भों को शामिल किए बिना।

अब, ईएफ 6 में अपग्रेड करने के बाद, ऐसा लगता है कि मुझे एकीकरण परीक्षण प्रोजेक्ट में भी EF6 का संदर्भ शामिल करने की आवश्यकता है, भले ही इसका उपयोग नहीं किया गया हो ( user3004275 द्वारा ऊपर बताए गए user3004275 )।

संकेत आप एक ही समस्या का सामना कर रहे हैं:

  • ईएफ को सीधे कॉल (डीबी से कनेक्ट करने, डेटा प्राप्त करने आदि) ठीक काम करते हैं, जब तक कि वे एक परियोजना से शुरू किए जाते हैं जिसमें ईएफ 6 के संदर्भ होते हैं।
  • एक प्रकाशित सेवा इंटरफेस के माध्यम से सेवा के लिए कॉल ठीक काम करता है; यानी सेवा में "आंतरिक रूप से" कोई अनुपलब्ध संदर्भ नहीं हैं।
  • सेवा प्रोजेक्ट में सीधे सार्वजनिक परियोजनाओं के लिए कॉल करता है , सेवा के बाहर एक परियोजना से, इस त्रुटि का कारण बन जाएगा, भले ही उस परियोजना में ईएफ का उपयोग नहीं किया गया हो; केवल आंतरिक परियोजना में आंतरिक रूप से

तीसरा बिंदु यह है कि मुझे थोड़ी देर के लिए फेंक दिया, और मुझे अभी भी यकीन नहीं है कि यह क्यों जरूरी है। मेरे एकीकरण परीक्षण परियोजना में ईएफ 6 को रेफरी जोड़ने से इसे किसी भी मामले में हल किया गया ...


साथ ही, सुनिश्चित करें कि स्टार्टअप प्रोजेक्ट वह प्रोजेक्ट है जिसमें आपका dbcontext (या प्रासंगिक app.config) शामिल है। मेरा एक वेबसाइट प्रोजेक्ट शुरू करने की कोशिश कर रहा था जिसमें सभी आवश्यक कॉन्फ़िगरेशन सेटिंग्स नहीं थीं।


जब आप Nuget माध्यम से इकाई फ्रेमवर्क 6 स्थापित Nuget । EntityFramework.SqlServer कभी-कभी किसी अन्य निष्पादन योग्य के लिए याद आती है। बस उस परियोजना में Nuget पैकेज जोड़ें।

कभी-कभी टेस्ट प्रोजेक्ट के लिए काम नहीं करता है

टेस्ट प्रोजेक्ट में इस मुद्दे को हल करने के लिए बस टेस्ट प्रोजेक्ट के अंदर इस विधि को रखें:

public void FixEfProviderServicesProblem()
{
    var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}

इस विधि को कभी नहीं कहा जाता है, लेकिन मेरे अवलोकनों के रूप में, संकलक सभी "अनावश्यक" असेंबली को हटा देगा और EntityFramework.SqlServer सामग्री का उपयोग किए बिना परीक्षण विफल हो जाता है।


इस समारोह को जोड़ें

private void FixEfProviderServicesProblem()

पुस्तकालय वर्ग में डेटाबेस संदर्भ वर्ग और अनुपलब्ध DLL EntityFramework.SqlServer.dll को सही स्थानों पर कॉपी किया जाएगा।

namespace a.b.c
{
    using System.Data.Entity;

    public partial class WorkflowDBContext : DbContext
    {
        public WorkflowDBContext()
            : base("name=WorkflowDBConnStr")
        {
        }

        public virtual DbSet<WorkflowDefinition> WorkflowDefinitions { get; set; }
        public virtual DbSet<WorkflowInstance> WorkflowInstances { get; set; }
        public virtual DbSet<EngineAlert> EngineAlerts { get; set; }
        public virtual DbSet<AsyncWaitItem> AsyncWaitItems { get; set; }
        public virtual DbSet<TaskItem> TaskItems { get; set; }
        public virtual DbSet<TaskItemLink> TaskItemLinks { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
        }

        private void FixEfProviderServicesProblem()
        {
            // The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'
            // for the 'System.Data.SqlClient' ADO.NET provider could not be loaded. 
            // Make sure the provider assembly is available to the running application. 
            // See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
            var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
        }
    }
}


मैंने नूजेट का उपयोग करके एंटीटी फ्रेमवर्क को फिर से स्थापित किया है। और नीचे दिए गए लिंक पर लिखे गए निर्देशों का पालन करें: http://robsneuron.blogspot.in/2013/11/entity-framework-upgrade-to-6.html

मुझे लगता है कि समस्या हल हो जाएगी।


मैं बस एक ही समस्या में आया और ऐसा लगता है कि EntityFramework हालांकि NuGet पैकेज प्रबंधक से स्थापित प्रोजेक्ट में सही ढंग से स्थापित नहीं किया गया था।

मैं पैकेज प्रबंधक कंसोल पर निम्न आदेश चलाकर इसे ठीक करने में कामयाब रहा:

PM> Install-Package EntityFramework

मैं आज इस समस्या में भाग गया। मेरे पास डेटा रिपोजिटरी क्लास लाइब्रेरी है जिसमें EF63 NuGet पैकेज और परीक्षण के लिए कंसोल एप्लिकेशन है, जिसमें केवल क्लास लाइब्रेरी प्रोजेक्ट का संदर्भ है। मैंने बहुत ही सरल पोस्ट-बिल्ड कमांड बनाया है, जो क्लास लाइब्रेरी के बिन \ डीबग फ़ोल्डर से एंटीटीफ्रेमवर्क.SqlServer.dll को कंसोल एप्लिकेशन के बिन \ डीबग फ़ोल्डर और समस्या हल करने के लिए प्रतिलिपि बनाता है। एप्लिकेशन की .config फ़ाइल को कंसोल करने के लिए entityFramework अनुभाग को जोड़ने के लिए मत भूलना।


मैंने लगभग सभी उपरोक्त कोशिश की और कुछ भी काम नहीं किया।

केवल तभी जब मैंने डिफॉल्ट प्रोजेक्ट EntityFramework और EntityFramework.SqlServer में संदर्भित डीएलएल सेट किए हैं। EntityFramework EntityFramework.SqlServer गुण Copy Local को True Copy Local यह काम करना शुरू कर दिया!


नीचे अपने app.config में जोड़ें।

 <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

आपको अपने कंसोल एप्लिकेशन में एंटीटी फ्रेमवर्क इंस्टॉल करने की आवश्यकता नहीं है, आपको केवल असेंबली EntityFramework.SqlServer.dll के संदर्भ को जोड़ने की आवश्यकता है। आप इस असेंबली को क्लास लाइब्रेरी प्रोजेक्ट से कॉपी कर सकते हैं जो एक LIB फ़ोल्डर में एंटीटी फ्रेमवर्क का उपयोग करता है और इसके लिए एक संदर्भ जोड़ता है।

संक्षेप में:

  • कक्षा पुस्तकालय आवेदन:
    • इकाई फ्रेमवर्क स्थापित करें
    • अपना डेटा लेयर कोड लिखें
    • app.config फ़ाइल में कनेक्शन स्ट्रिंग को छोड़कर इकाई फ्रेमवर्क से संबंधित सभी कॉन्फ़िगरेशन हैं।
  • कंसोल, वेब या डेस्कटॉप एप्लिकेशन बनाएं:
    • पहली परियोजना का संदर्भ जोड़ें।
    • EntityFramework.SqlServer.dll का संदर्भ जोड़ें।
    • app.config / web.config में कनेक्शन स्ट्रिंग है (याद रखें कि कॉन्फ़िगरेशन एंट्री का नाम डीबीकॉन्टेक्स्ट क्लास के नाम के समान होना चाहिए।

मुझे उम्मीद है यह मदद करेगा।


बिन-फ़ोल्डर को हटाने से यह मेरे लिए किया गया







entity-framework