ADO.NET प्रदाता के लिए कोई एंटिटी फ्रेमवर्क प्रदाता नहीं मिला, जिसका नाम 'System.Data.SqlClient' है।


542

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

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

यहाँ छवि विवरण दर्ज करें


मैं सामान providersऔर providerसामान के बिना EF5 का उपयोग करता हूं , इसलिए इसे हटाने पर विचार करें?
ta.speot.is

1
अपने कनेक्शन स्ट्रिंग की एक प्रति यहां रखें
pylover

कनेक्शन स्ट्रिंग तस्वीर में है (App.confing), वैसे यह बहुत सरल है, मैं public BaseStorage(): base ("RaptorDB") {}EF5 में पहले से ही काम कर रहे EF5 में DbContext से कंस्ट्रक्टर, बेसस्टोरेज () विरासत में मिला, पहले से ही ईएफ 6 में नहीं।
फर्नांडो वेल्लोज़ो

10
ईएफ 6, दूसरी परियोजना (कंसोल) स्थापित करके समस्या हल हो जाएगी, सभी को धन्यवाद, जिन्होंने किसी भी तरह से मदद की!
फर्नांडो वेल्लोज़ो

3
मेरे लिए, यह विजुअल स्टूडियो द्वारा यह महसूस नहीं किया गया था कि EntityFramework.SqlServer असेंबली का उपयोग वास्तव में आधार परियोजना द्वारा किया गया था। यदि आप @ कैर्रा के उत्तर की तरह कुछ करते हैं , तो आपको प्रत्येक प्रोजेक्ट में ईएफ को जोड़ने की ज़रूरत नहीं है जो आपके आधार प्रोजेक्ट को संदर्भित करता है - बहुत क्लीनर।
तेहदॉ

जवाबों:


608

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

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

PM> Install-Package EntityFramework

34
PMC ने लिखा है कि 'EntityFramework 6.0.1' पहले से ही इंस्टॉल है, लेकिन इसे मेरे कंसोल ऐप में जोड़ा गया है (जो कि गलती से EF का उपयोग नहीं कर रहा है), लेकिन इसने मेरे लिए भी यह चाल चली। II कंसोल ऐप संदर्भों से ईएफ हटाएं, त्रुटि रिटर्न, मुझे यह नहीं मिलता है - मेरा कंसोल ऐप रिपॉजिटरी प्रोजेक्ट (जो ईएफ का उपयोग करता है) का उपयोग कर रहा है मदद के लिए धन्यवाद!
प्रूरोर्स

33
यदि आप अपने समाधान में कई परियोजनाएँ हैं, तो कमांड लाइन में -ProjectName <ProjectName> जोड़ना न भूलें ... !!!
यूजीनियो मिरो

1
-Preविकल्प का उपयोग करते हुए पूर्वगीत संकुल को स्थापित करने के लिए नगेट बताएं। मैं इसका उपयोग करने की सलाह नहीं देता। मेरे पास एक समान त्रुटि है लेकिन समाधान केवल होस्ट प्रोजेक्ट में EntityFramework स्थापित करना था। मैंने इसे एक क्लास लाइब्रेरी में स्थापित किया है, लेकिन मुख्य प्रोजेक्ट में नहीं (वेब ​​/ कंसोल / या जो भी),
डेविड इकार्डी

10
यहां भी यही समस्या। मेरे पास एक प्रोजेक्ट था जिसमें EF का संदर्भ नहीं था लेकिन EF dll डीबग फ़ोल्डर में था। इस प्रोजेक्ट के विरुद्ध इस कमांड को चलाने EntityFramework.SqlServer.dllसे डिबग फोल्डर में जोड़ा गया - समस्या हल हो गई।
qujck

4
मेरी स्थिति में यह त्रुटि तब तक मौजूद नहीं थी जब तक कि मैंने परियोजना को हमारे परीक्षण सर्वर पर तैनात नहीं किया। वास्तव में यह EntityFramework.SqlServer.dll था जो पैकेज प्रबंधक के माध्यम से गायब था और EF को स्थापित करने से काम किया। यह सिर्फ परियोजना के लिए दो प्रासंगिक संदर्भों को जोड़ता है और फिर web.config में UnitFramework सेटिंग्स जोड़ देता है। मुझे लगता है कि स्थानीय IIS स्थानीय रूप से विधानसभा का स्रोत था, लेकिन वेब सर्वर पर पूर्ण IIS अनुमतियों के कारण नहीं हो सकता था?
3

383

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


246
यह बिल्कुल हास्यास्पद जवाब है। पृथ्वी पर मुझे ऐसा करने की आवश्यकता क्यों होगी? और आप जानते हैं कि और भी हास्यास्पद क्या है? यह काम करता हैं।
रॉबर्ट

19
नीचे मेरा उत्तर देखें, आपको अपने कंसोल एप्लिकेशन में EF इंस्टॉल करने की आवश्यकता नहीं है।
फ्रांसिस्को गोल्डनस्टीन

7
आप जवाब सही है। केवल संदर्भ EntityFramework.SqlServer.dll को EF के साथ एक पुस्तकालय का उपयोग करने वाले दृश्य परियोजना में जोड़ें, समस्या को ठीक करें। तो यह एफई (केवल DLL) का उपयोग नहीं करते
harveyt

31
आपको कंसोल / वेब ऐप में EF का संदर्भ जोड़ने की आवश्यकता नहीं है । आपको बस यह सुनिश्चित करने की आवश्यकता है कि EntityFramework.SqlServer.dllबिन निर्देशिका में कॉपी किया जा रहा है। एक मजबूत संदर्भ जोड़ने से आपकी वास्तुकला टूट सकती है (यदि आपने कई स्तरों का निर्माण किया है, तो आपकी शीर्ष-स्तरीय निष्पादन विधानसभा को भी EF के बारे में पता नहीं होना चाहिए)। इसके बजाय, आप यह सुनिश्चित कर सकते हैं कि SQL सर्वर प्रदाता की प्रतिलिपि बनाई गई है। उदाहरण के लिए देखें stackoverflow.com/a/19130718/870604
ken2k

3
मुझे इस बात पर संदेह है कि EntityFramework.SqlServer.dll को एक निर्भरता के रूप में नहीं पाया गया है क्योंकि Entity फ्रेमवर्क इसे गतिशील रूप से लोड करता है। आपकी परियोजना को एसक्यूएल प्रदाता पर कॉपी करने के लिए कैसे जाना जाता है जब यह केवल संदर्भ फ़ाइल में है?
जोएल मैकबेथ

209

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

संक्षेप में:

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

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


18
सही उत्तर। कोई EF स्थापित करने की आवश्यकता है। EntityFramework.SqlServer.dll।
टॉम स्टिकेल

15
मुझे सहमत होना होगा। यह पूरी तरह से सही उत्तर है। संदर्भ एक dll है जो 1/2 mb है या EF नगेट परियोजना को खींचता है जो कि> 5.5 mb है। मल्टी टियर को भी थोड़ा कम करने के लायक है। वास्तव में एमएस से खराब शो: मेरे पास 4 स्तरीय हैं और मेरे शीर्ष स्तरीय को वास्तव में ईएफ के बारे में कुछ भी जानने का कोई कारण नहीं होना चाहिए
72GM

18
फिर भी हास्यास्पद है। उदा। फ्रंट एंड को SqlServer के संदर्भ की आवश्यकता क्यों होगी? मेरे मामले में फ्रंट एंड कम देखभाल नहीं कर सकता है। लेकिन यह काम करता है। +1
माइक डी क्लार्क

2
यह मददगार था। बहुत बहुत धन्यवाद।
peter_the_oak 12

1
क्या इससे EntityFramework के संस्करणों को अपडेट करना कठिन नहीं होगा? आप याद करने के लिए जाने के लिए और DLL के संदर्भ में अद्यतन करने के लिए होगा
कुचलने

114

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

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


7
मैं इस समस्या में भाग गया जब मेरे पास पहले एक परियोजना (ए) एक परियोजना (बी) के संदर्भ में थी जिसमें ईएफ का संदर्भ था। प्रोजेक्ट (ए) बिन फ़ोल्डर को साफ करने और हटाने के बाद, फिर से निर्माण, EF संदर्भ भर में आया, लेकिन EF.SqlServer.dll नहीं। इसे मैन्युअल रूप से कॉपी करते हुए मेरे लिए काम किया
dan richardson

2
@dan richardson 'बिन फ़ोल्डर को हटाने' का उल्लेख करने के लिए धन्यवाद।
राजशेखर रेड्डी

EF6 अपग्रेड के बाद एक LINQPad स्क्रिप्ट को चलाने की कोशिश करते समय मुझे त्रुटि मिली। यहां तक ​​कि EntQFramework.qlServer.dll को LINQPad में संदर्भित करने पर भी इसे ठीक नहीं किया गया था क्योंकि मैंने VS2013 में अपने समाधान का पुनर्निर्माण किया था। नया संदर्भ तब LINQPad में ठीक से हल हो गया और मेरी स्क्रिप्ट चली!
क्रिस

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

यह मेरे लिए मुद्दा था, धन्यवाद! हर आवश्यक परियोजना में DLL को शामिल करने के लिए भूल जाने वाले मुद्दों से बचने के लिए @Anders द्वारा स्वच्छ समाधान देखें।
शार्प

54

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

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-d dependencies- and- copy- local- fails- to- copy /


5
मुझे लगता है कि यह एक अच्छा साफ समाधान है, जहां हमें उन परियोजनाओं में दृढ़ता से संबंधित DLL के संदर्भों को शामिल नहीं करना है जो दृढ़तावादी होना चाहिए।
Jechech

3
सहमत हैं, और यह किसी भी पुस्तकालय पर निहित निर्भरता के साथ लागू होता है न कि दृढ़ता
एंडर्स

3
जब आपके पास विधानसभा में एक प्रकार पर एक स्पष्ट निर्भरता होती है तो इसे निर्माण प्रक्रिया द्वारा कॉपी किया जाएगा। हालाँकि यहां आपके पास एक स्पष्ट निर्भरता नहीं है, और निर्माण प्रक्रिया असेंबली को बिल्ड फ़ोल्डर में कॉपी करने में विफल हो जाएगी। मेरा कोड यह सुनिश्चित करता है कि उक्त विधानसभा में किसी भी प्रकार का एक स्पष्ट संदर्भ मौजूद है।
एंडर्स

2
इसके बिना आपके कोड से विधानसभा के लिए कोई स्पष्ट निर्भरता नहीं है और इसे आउटपुट पर कॉपी नहीं किया जाएगा
एंडर्स

2
ये जबरदस्त है।
क्रिश

48

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

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

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

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

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


2
वैसे यह बहुत अच्छा नहीं है लेकिन इसने इस मुद्दे को तय कर दिया है कि मैं अपने टेस्ट प्रोजेक्ट में शामिल था। अन्य समाधानों में से किसी ने भी काम नहीं किया।
माननीय चाउ

मेरे मामले में "टेस्ट सॉल्यूशन के लिए नौगेट पैकेट्स प्रबंधित करें" में मेरे टेस्ट प्रोजेक्ट में एंटिटी फ्रेमवर्क को भी जोड़ना पर्याप्त था
जुहा पालोमैकी

वास्तविक रूप से आपको यह सुनिश्चित करने के लिए किसी भी परियोजना (न केवल परीक्षण) में डालने की आवश्यकता है कि System.Data.Entity.SqlServer संकलन के बाद "परिणाम आवश्यक सेट" में शामिल किया जाएगा (नोट: एकता या अन्य IoC उपकरण इस नियम को बदल सकता है और आप करेंगे परीक्षण कोड से इस कोड को कॉल करने की आवश्यकता है)।
रोमन पोक्रोव्सीज

यह वास्तव में सबसे अच्छा समाधान है, क्योंकि आपको अपनी परियोजना में हर जगह इकाई ढांचे के संदर्भों को स्प्रे करने की आवश्यकता नहीं है।
डैनियल लोबो

इसने मुझे सही दिशा की ओर इशारा किया। EntityFramework.SqlServerअपने वर्ग पुस्तकालय में जोड़ा जाता है, लेकिन अगर प्रयोग नहीं किया है, यह आपके आवेदन के उत्पादन फ़ोल्डर के अंदर नहीं रखा जाएगा। मैंने एक को जोड़कर समस्या को ठीक किया ExecutionStrategy, जिसे मुझे अभी भी करने की ज़रूरत थी, इसलिए SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());एक DbConfigurationवर्ग के अंदर एक पंक्ति को जोड़ने से समस्या ठीक हो गई।
Jan_V

24

इस फ़ंक्शन को जोड़ें

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;
        }
    }
}


खेद है कि यह रद्द करने की कोशिश कर रहा है ... जैसा कि मैंने नहीं सोचा था कि यह काम करेगा ... और यह करता है! ... यह कहता है कि मैं अपना वोट नहीं बदल सकता, जब तक कि जवाब संपादित नहीं किया जाता है, cozs बहुत लंबा हो गया है और तब से है लॉक किया हुआ ...
सीबेकिट

इसने मेरे लिए भी काम किया। हमारे पास एक पुस्तकालय परियोजना है जो EF 6 का उपयोग करती है, और एक कंसोल अनुप्रयोग जो पुस्तकालय का उपयोग करता है। हमें ओपी के समान अपवाद मिल रहे थे। हम एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल में EntityFramework- विशिष्ट कॉन्फ़िगरेशन को रखने की इच्छा नहीं रखते हैं, इसलिए यह विधि हमारे लिए काम करती है। धन्यवाद
रोब

1
जहाँ आप कहते हैं FixEfProviderServicesProblemमैंने निर्माणकर्ता में बिना किसी भाग्य के प्रयास किया।
फ्रांसिस डुकरमे

1
मैं इसे कभी नहीं कहता - नहीं है। तथ्य यह है कि वहाँ बनाता है .net इसकी जरूरत को लगता है और निर्भरता के रूप में EntityFramwork शामिल है।
जोहान्स

संभवतः stackoverflow.com/a/19130718/1467396 से ? लेकिन +1, वैसे भी स्पष्टता के लिए कि कैसे / कहाँ इसका उपयोग करना है।
डेविड

20

इनमें से किसी ने मेरे लिए काम नहीं किया। मैं एक और stackoverflow प्रश्न में समाधान मिल गया । मैं इसे आसान संदर्भ के लिए यहां जोड़ूंगा:

आपको एक संदर्भ बनाने की आवश्यकता है, इसलिए इसे डेन एप्लिकेशन पथ में कॉपी किया जाएगा। क्योंकि बाद में इसे रनटाइम में रेफर किया जाएगा। इसलिए आपको किसी भी फाइल को कॉपी करने की आवश्यकता नहीं है।

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}

2
इस! अन्य परियोजनाओं के लिए एक संदर्भ जोड़ने की आवश्यकता नहीं है जो इस विधानसभा को संदर्भित कर सकते हैं।
तेहदॉ

8

SQL सर्वर कॉम्पैक्ट 4.0 के साथ Entity फ्रेमवर्क 6 का उपयोग करते समय मुझे वही त्रुटि मिली। EF6 के लिए एंटिटी फ्रेमवर्क प्रोवाइडर्स के लिए MSDN पर लेख सहायक था। संकुल प्रबंधक कंसोल पर संबंधित प्रदाता आदेशों को चलाने से समस्या हल हो सकती है, क्योंकि NuGet संकुल स्वतः ही विन्यास फाइल में पंजीकरण जोड़ देगा। मैं PM> Install-Package EntityFramework.SqlServerCompactसमस्या को हल करने के लिए भागा ।


2
मैं वास्तव में हैरान हूँ कि किसी ने भी इसके लिए मतदान नहीं किया है! त्रुटि संदेश स्पष्ट रूप से बताता है: त्रुटि का कारण यह है कि EF अपग्रेड के बाद, अनुप्रयोग के web.config फ़ाइल में SQL कॉम्पैक्ट के लिए वास्तव में कोई प्रदाता परिभाषा नहीं बची है! आपके द्वारा उल्लेखित पैकेज को जोड़ने से web.config फ़ाइल ठीक हो जाती है, और प्रदाता परिभाषित हो जाएगा।
सेसाबा तोथ

1
बस जीवन रक्षक। इसे उत्तर के रूप में चिह्नित किया जाना चाहिए क्योंकि यह स्पष्ट रूप से समस्या का समाधान प्रदान करता है
ZafarYousafi

7

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

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

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

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

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

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


7

जब परीक्षणों में त्रुटि होती है, तो परीक्षण कक्षा को सजाने के लिए सबसे सुंदर समाधान है:

[DeploymentItem("EntityFramework.SqlServer.dll")]

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

7

स्टार्टअप प्रोजेक्ट जो उस परियोजना का संदर्भ देता है जहां एंटिटी फ्रेमवर्क का उपयोग किया जा रहा है, उसे बिन फ़ोल्डर में निम्नलिखित दो विधानसभाओं की आवश्यकता है:

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

स्टार्टअप प्रोजेक्ट पर .config फ़ाइल <section>में <configSections>से एक को जोड़ना उस बिन निर्देशिका में पहली असेंबली उपलब्ध करता है। आप इसे अपने एंटिटी फ्रेमवर्क प्रोजेक्ट की .config फ़ाइल से कॉपी कर सकते हैं:

<configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>

बिन फ़ोल्डर में दूसरा .dll उपलब्ध कराने के लिए, हालांकि व्यावहारिक नहीं है, इकाई फ्रेमवर्क परियोजना के बिन फ़ोल्डर से एक मैनुअल प्रतिलिपि बनाई जा सकती है। एक बेहतर विकल्प इकाई फ्रेमवर्क के पोस्ट-बिल्ड इवेंट्स को निम्न पंक्तियों में जोड़ना है, जो प्रक्रिया को स्वचालित करेगा:

cd $(ProjectDir)
xcopy /y bin\Debug\EntityFramework.SqlServer.dll ..\{PATH_TO_THE_PROJECT_THAT_NEEDS_THE_DLL}\bin\Debug\

2
धन्यवाद, मेरे पास एक डेटा लेयर में Entity ढांचा है इसलिए इसे अलग किया गया है लेकिन यह दुर्भाग्यपूर्ण है कि microsoft wont हमें डेटा लेयर को अलग-थलग करने की अनुमति देता है और डेटाबेस तकनीक के साथ ux को प्रदूषित करता है। मैं उम्मीद कर रहा था कि मुझे ऐसा नहीं करना पड़ेगा।
मैट

4

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


4

अपने 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>

आपको इसे रजिस्टर करने की भी आवश्यकता है <configSections>-<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
TryingToImprove

यह "IInstall-Package EntityFramework" करता है। यह वास्तव में आवश्यक नहीं है क्योंकि डिफ़ॉल्ट रूप से EntityFramework डिफ़ॉल्ट रूप से EntityFramework.SqlServer.dll को SqlClient के अपरिवर्तनीय नाम को लोड करने का प्रयास करता है। प्रदाता को स्थानापन्न करने के लिए इस विधि का उपयोग किया जा सकता है।
user1295211


3

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

  1. यदि आपके पास पहले से ही DbConfiguration क्लास है:

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

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

2

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

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


एक स्पष्टीकरण अच्छा होगा! आपको इसे और फिर से क्यों स्थापित करना है
Rizier123

1
क्योंकि किसी अज्ञात कारण से परिवर्तन प्रभावी नहीं होंगे और इसलिए मैंने EntityFramework 6.1.1 को फिर से स्थापित किया और इसके बाद यह प्रभावी हुआ।
कुंतल घोष

2

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

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

SqlProviderServices = System.Data.Entity.SqlServer.SqlProviderServices का उपयोग करना;

हर बार फ़ाइल को ऑटो जनरेट करने के लिए आपको इस लाइन को फ़ाइल में जोड़ना पड़ सकता है।


2

मुझे भी इसी तरह की समस्या थी। मेरी समस्या का समाधान निम्न प्रकार से किया गया:

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें


2

यदि सिस्टम Data.SqlClient सिस्टम में स्थापित है और यदि इसके लिए एक संदर्भ बनाया गया है, तो ऐसा लगता है कि किसी ने भी पहले चेकिंग का उल्लेख नहीं किया है।

मैंने System.Data.SqlClient को स्थापित करके और ऐप में एक नए प्रदाता में जोड़कर अपनी समस्या हल की है। कॉनफिग

<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>

1

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


1

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

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


1

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

तार्किक तरीका यह है कि Enitiess विशेषता को धाराप्रवाह API.this के साथ हटा दें और बदल दें, यह वास्तविक समाधान है


1

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

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

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

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

मुझे उम्मीद है कि इससे मदद मिली।


1

मेरी भी यही त्रुटि है। यह अजीब है कि यह केवल तब होता है जब मैंने अपने dbContext का उपयोग अपने किसी भी मॉडल को क्वेरी करने के लिए किया या उसकी सूची प्राप्त की जैसे:

var results = _dbContext.MyModel.ToList();

हमने एंटिटी फ्रेमवर्क को फिर से स्थापित करने की कोशिश की, इसे ठीक से संदर्भित किया लेकिन कोई फायदा नहीं हुआ।

सौभाग्य से, हमने ALLसमाधान के लिए नूगेट की जांच करने की कोशिश की , फिर सब कुछ अपडेट करें या सुनिश्चित करें कि everythingयह एक ही संस्करण है क्योंकि हमने देखा कि दो परियोजनाओं के वेब प्रोजेक्ट पर अलग-अलग ईएफ संस्करण हैं। और यह काम करता है। त्रुटि हो गई है।

यहाँ सभी समाधान के लिए Nuget प्रबंधित करने के लिए स्क्रीनशॉट है:

यहाँ छवि विवरण दर्ज करें


1

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


0

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


0

मेरे पास एक ही मुद्दा था, बस उस प्रोजेक्ट से ऐप कॉन्फिगर फ़ाइल की प्रतिलिपि बनाई जिसमें मेरे परीक्षण प्रोजेक्ट में DBContext शामिल था


0

मेरे पास समान अपवाद था। मैं शामिल हूं

using System.Data; 
using System.Data.Entity;

और सब कुछ फिर से काम करने के लिए वापस आ गया है ।।


0

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.