इकाई फ्रेमवर्क प्रदाता प्रकार लोड नहीं किया जा सका?


420

मैं TeamCity पर अपने परीक्षण चलाने की कोशिश कर रहा हूं जो वर्तमान में मेरी मशीन पर स्थापित है।

System.InvalidOperationException:

इकाई की रूपरेखा प्रदाता प्रकार ' System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'के लिए' System.Data.SqlClient'ADO.NET प्रदाता लोड नहीं किया जा सकता है। सुनिश्चित करें कि प्रदाता विधानसभा चल रहे आवेदन के लिए उपलब्ध है।

अधिक जानकारी के लिए http://go.microsoft.com/fwlink/?LinkId=260882 देखें ..

मेरे System.Data.Entityकिसी भी प्रोजेक्ट में मेरा कोई संदर्भ नहीं है जैसा कि EF6 में अपग्रेड करने के लिए कोडप्लेक्स पर सुझाया गया था।

इसलिए, मुझे यकीन नहीं है कि मुझे यह अपवाद क्यों मिल रहा है। जब मैं वी.एस. से परीक्षण चलाता हूं तो मुझे ऐसा कोई अपवाद नहीं मिलता है।

मैं तो सच करने के लिए फिर से CopyLocal सेट करने की कोशिश की .. लेकिन यह भी काम नहीं लगता है।

अपडेट करें

मेरे app.config निम्नलिखित है। क्या इससे कुछ व्यवहार होता है जो मुझे समझ में नहीं आता है?

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

मुझे टीमकैस्ट में निम्नलिखित स्टैकट्रेस मिलते हैं।

[MSTest] IntegrationTests.CrudTest+QuestionTest.Create
[03:59:11][IntegrationTests.CrudTest+QuestionTest.Create] Initialization method IntegrationTests.CrudTest+QuestionTest.Initialize threw exception. System.InvalidOperationException: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 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..
[03:59:11]
[IntegrationTests.CrudTest+QuestionTest.Create]     at System.Data.Entity.Config.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName)
   at System.Data.Entity.Config.ProviderServicesFactory.GetInstanceByConvention(String providerInvariantName)
   at System.Data.Entity.Config.DefaultProviderServicesResolver.GetService(Type type, Object key)
   at System.Data.Entity.Config.CachingDependencyResolver.<>c__DisplayClass1.<GetService>b__0(Tuple`2 k)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at System.Data.Entity.Config.CachingDependencyResolver.GetService(Type type, Object key)
   at System.Data.Entity.Config.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Data.Entity.Config.ResolverChain.GetService(Type type, Object key)
   at System.Data.Entity.Config.RootDependencyResolver.GetService(Type type, Object key)
   at System.Data.Entity.Config.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Data.Entity.Config.ResolverChain.GetService(Type type, Object key)
   at System.Data.Entity.Config.CompositeResolver`2.GetService(Type type, Object key)
   at System.Data.Entity.Config.IDbDependencyResolverExtensions.GetService[T](IDbDependencyResolver resolver, Object key)
   at System.Data.Entity.Config.InternalConfiguration.GetService[TService](Object key)
   at System.Data.Entity.Config.DbConfiguration.GetService[TService](Object key)
   at System.Data.Entity.Utilities.DbProviderFactoryExtensions.GetProviderServices(DbProviderFactory factory)
   at System.Data.Entity.Infrastructure.DefaultManifestTokenService.GetProviderManifestToken(DbConnection connection)
   at System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)
   at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
   at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
   at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
   at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity)
   at System.Data.Entity.DbSet`1.Add(TEntity entity)
   at EFRepository.Infrastructure.EFRepository`1.Add(T item) in c:\TeamCity\buildAgent\work\da2ea4e72c0e77f0\Repository\Infrastructure\EFRepository.cs:line 22
   at IntegrationTests.CrudTest.Initialize() in c:\TeamCity\buildAgent\work\da2ea4e72c0e77f0\IntegrationTests\CrudTest.cs:line 34

1
क्या EntityFramework.SqlServer.dll EntityFramework.dll के साथ तैनात किया गया है? EF6 में SqlServer और SqlServerCE प्रदाता एक ही विधानसभा में नहीं हैं क्योंकि EF इंजन पिछले संस्करणों के साथ था। आपको System.Data.Entity.dll का संदर्भ नहीं जोड़ना चाहिए। EF6 में प्रदाता मॉडल EF5 की तुलना में बदल गया और EF5 प्रदाता सिर्फ काम नहीं करेगा। इसके अलावा आप कुछ मुश्किल समस्याओं (जैसे EF5 भू-स्थानिक प्रकारों को इकाई प्रकारों के रूप में EF6 में इलाज कर सकते हैं) पर हिट कर सकते हैं
Pawel

हाँ, मैंने डबल चेक किया है कि System.Data.Entity का कोई संदर्भ नहीं है और EntityFramework.dll और EntityFramework.SqlServer.dll दोनों के संदर्भ मौजूद हैं। फिर से प्रोजेट का संकलन और परीक्षण वी.एस. यह केवल तभी होता है जब मैं टीमसिटी पर परीक्षण चलाता हूं कि त्रुटि हुई।
आशुतोष वर्षा

यह एक सही सेटअप है। मैंने टीमसिटी का उपयोग नहीं किया है, लेकिन यह मुझे प्रतीत होता है कि जब आपका ऐप TeamCity EntityFramework.SqlServer.dll के साथ परीक्षणों को चलाने के लिए तैनात किया गया है, तो यह अनुपलब्ध है और इसलिए अपवाद है।
पावेल

1
इस पोस्ट से उत्तर देखें: stackoverflow.com/questions/21175713/… मैंने private volatile Type _dependency...उत्तर जोड़ा और यह काम कर गया! यह सिर्फ यह सोचता है कि मुझे टीम कैफिटी में काम करने के लिए सिर्फ ईएफ पाने के लिए एक अलग वर्ग जोड़ना होगा।
a11smiles

2
मैंने एनगेट पैकेज से EntityFramework की स्थापना रद्द की और फिर से स्थापित किया और यह ठीक हो गया
abhyudayasrinet

जवाबों:


426

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


108
मैंने इस पर भी गौर किया। यदि आप एक पुस्तकालय बनाते हैं जो EF का उपयोग करता है, तो VS उस बिल्ड फ़ोल्डर में EF.dll और EF.SqlServer.dll डाल देगा। लेकिन अगर आपके पास अब एक और प्रोग्राम है, तो अपनी लाइब्रेरी का उपयोग करें, केवल EF.dll को इस बिल्ड फ़ोल्डर में डाला जाएगा। EF.SqlServer.dll अनुपलब्ध है। यदि आप इसे मैन्युअल रूप से बिल्ड फ़ोल्डर में जोड़ते हैं, तो प्रोग्राम काम करता है। अपने आप में एक अच्छा समाधान नहीं है, लेकिन दिखाता है कि समस्या EF.SQLServer.dll लापता है त्रुटि का कारण है।
एरिक

44
मैंने var x = typeof (System.Data.Entity.SqlServer.SqlProviderServices) जोड़ा; फिर मेरे ऐप ने काम किया
ब्रायन

33
मैं हमेशा चिंता करता हूं जब मैं कोड टाइप करता हूं तो बिल्कुल कुछ नहीं होता है और अचानक मेरी परियोजना चलती है। O_o
जॉर्डन

10
इसके अलावा, कंपाइलर ऑप्टिमाइज़ेशन के कारण आप ऐसा करना चाहते हैं x.ToString()या यह typeofरिलीज़ में एस को बाहर निकाल देगा ।
जॉर्डन

15
मुझे यह कष्टप्रद लगता है कि EF 6.1 को अब मेरे ASPX DLL / प्रोजेक्ट पर EF की आवश्यकता है, जबकि EF 5.0 को केवल मेरे डेटा-लेयर DLL / प्रोजेक्ट पर इसकी आवश्यकता थी।
पीटरएक्स

274

मुझे अपने टेस्ट प्रोजेक्ट्स में भी यही समस्या थी - मैंने NuGet के माध्यम से नवीनतम EF6 बिट्स स्थापित किए और हर बार जब मैं ईएफ-संबंधित कुछ प्राप्त करता हूं, तो मैं इनवाइट करता हूं:

'System.Data.SqlClient' ADO.NET प्रदाताओं को लोड नहीं किया जा सकता है। सुनिश्चित करें कि प्रदाता विधानसभा चल रहे आवेदन के लिए उपलब्ध है। अधिक जानकारी के लिए http://go.microsoft.com/fwlink/?LinkId=260882 देखें ।

मेरा वर्कअराउंड: मैंने इस पद्धति को अपने परीक्षण प्रोजेक्ट के अंदर रखा:

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

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

वैसे भी: मेरी मशीन पर काम करता है;)

नोट: परीक्षण परियोजना के लिए विधि जोड़ने के बजाय आप अपने मॉडल / इकाई परियोजना से SqlProviderServices का एक स्थिर संदर्भ सुनिश्चित कर सकते हैं


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

3
यह एक हैक है, लेकिन यह उस परिदृश्य के लिए सबसे अच्छा / सबसे आसान समाधान है, जिसमें आपके पास आपके प्रोजेक्ट के लिए एक परिनियोजन पैकेज नहीं है।
कोन

3
"Var x = typeof (SqlProviderServices);" जैसे अन्य सुझावों का उपयोग करने वाले आप सभी के लिए। केवल रॉबर्ट द्वारा प्रदान किया गया यह समाधान विकास और निर्माण मशीनों पर काम करता है !!!
अलेक्जेंडर श्मिट

3
धन्यवाद रॉबर्ट, यह EF टीम द्वारा हास्यास्पद है, लेकिन वैसे भी जो मेरे लिए काम कर रहा है।
हितेश

7
स्पष्ट होने के लिए: उपरोक्त कोड को अपनी DbContextकक्षा में जोड़ने से EF 6.1 में समस्या हल हो जाएगी। इस तरह आपको अपने फ्रंट-एंड (WebApi, आदि) प्रोजेक्ट में Entity Framework Nuget पैकेज को शामिल करने की आवश्यकता नहीं है और यह आपके डेटा स्तर में सब कुछ EF- संबंधित छोड़ सकता है।
निक

106

Nuget EntityFramework.SqlServer.dll को संदर्भित करने के लिए आपकी EF6 परियोजना को कॉन्फ़िगर करेगा। यह निर्माण के दौरान आपकी EF6 परियोजना के लिए आउटपुट फ़ोल्डर पर निर्भर करता है, लेकिन यह आपके EF6 परियोजना को संदर्भित करने वाली परियोजनाओं के लिए आउटपुट फ़ोल्डर पर लागू नहीं होगा। मेरा मानना ​​है कि ऐसा इसलिए है क्योंकि विज़ुअल स्टूडियो "स्मार्ट" है ताकि यह पता लगाया जा सके कि आपकी असेंबली में कुछ भी वास्तव में सीधे dll का उपयोग नहीं कर रहा है और इसलिए इसमें शामिल नहीं है। आप EntityFramework.SqlServer.dll को अपने EF6 प्रोजेक्ट में कोड जोड़कर परियोजनाओं के आउटपुट फ़ोल्डर में तैनात होने के लिए मजबूर कर सकते हैं जो आपके EF6 प्रोजेक्ट में कोड जोड़कर EntityFramework.SqlServer.dll का उपयोग करता है। कोड को एक उत्पन्न वर्ग में नहीं रखने के लिए सावधान रहें क्योंकि आप इसे अगले रीज़न पर खोने का जोखिम उठाते हैं। मैंने निम्न वर्ग को विधानसभा में जोड़ने के लिए चुना, जिसने समस्या को ठीक किया।

using System.Data.Entity.SqlServer;

internal static class MissingDllHack
{
    // Must reference a type in EntityFramework.SqlServer.dll so that this dll will be
    // included in the output folder of referencing projects without requiring a direct 
    // dependency on Entity Framework. See http://stackoverflow.com/a/22315164/1141360.
    private static SqlProviderServices instance = SqlProviderServices.Instance;
}

1
इससे MSTest के संबंध में मेरे लिए समस्या हल हो गई। मुझे यह तरीका पसंद है क्योंकि इसके लिए यह आवश्यक नहीं है कि मैं अपनी परीक्षा कक्षाओं में वर्ग की विरासत के साथ कुछ भी गड़बड़ करूं। बस टेस्ट असेंबली और MAGIC में कहीं न कहीं क्लास शामिल करें। धन्यवाद!
kbrimington

वास्तव में, यही कारण है कि यह संदर्भित प्रोजेक्ट आउटपुट में sqlserver.dll की प्रतिलिपि नहीं बना रहा है। ऐसा तब होता है जब आपके पास एप्लिकेशन और कॉन्टेक्स्ट असेंबली को निष्पादित करने के बीच एक और परत होती है। धन्यवाद इससे मेरी समस्या हल हो गई।
Bharat

2
4 सेकंड खर्च करने की इच्छा न रखने वालों के लिए: System.Data.Entity.SqlServer का उपयोग करना;
TTT

हम इकाई परीक्षणों के लिए एक सामान्य आधार वर्ग का उपयोग करते हैं, सभी इकाई परीक्षण इस वर्ग से प्राप्त होते हैं। इस विधि को उस एक वर्ग में जोड़ने का अर्थ है कि बेस क्लास के काम से विरासत में मिली यूनिट टेस्ट क्लास वाली सभी परियोजनाएँ ठीक हैं।
मैक्सजे

3
छोटा बिंदु, लेकिन यह समझाने के लिए कि यह आवश्यक क्यों है, इस वर्ग में एक टिप्पणी जोड़ना शायद सबसे अच्छा है।
जॉन डारविल

43

मेरा समाधान नगेट प्रबंधक के माध्यम से परियोजना से इकाई ढांचे को हटाने और इसे वापस जोड़ने के लिए था।


9
PM> Update-Package -Reinstall "EntityFramework" -ProjectName "MyProj1"
वाहिदएन

इसने मेरे लिए काम किया, और मुझे लगता है कि यह इष्टतम समाधान हो सकता है
ccoutinho

सरल, साफ समाधान जो काम करता है। सूची में बहुत अधिक होना चाहिए
मोड

29

मैंने इसे अपने DBContext वर्ग के शीर्ष पर एक उपयोग स्टेंट जोड़कर हल किया, जैसे:

using SqlProviderServices= System.Data.Entity.SqlServer.SqlProviderServices;

1
यह इस समस्या का सबसे साफ समाधान है। धन्यवाद।
अलेक्जेंड्रू डिकु

यह समाधान काम करता है और साफ दिखता है। प्रश्न: क्या हम DBContext क्लास को लाइन रिफ्रेश करते हुए ढीले होंगे? यानी edmx वर्ग पीढ़ी का उपयोग?
NoloMokgosi

विश्वास नहीं कर सकता यह आवश्यक था और किसी भी तरह Microsoft द्वारा ठीक नहीं किया गया है - लेकिन यह मेरे लिए काम करता है। एक सरल समाधान के लिए धन्यवाद।
ज़ार बोमा

यह समाधान कार्यात्मक रूप से MissingDllHack के समान है । यह क्लीनर लग सकता है, लेकिन आपके संदर्भ वर्ग में वर्कअराउंड कोड का परिचय देता है। इस कोड को ReSharper जैसे उपकरणों द्वारा हटाने के लिए भी ध्वजांकित किया जाएगा और समय के साथ आसानी से खो दिया जा सकता है। एक अच्छा समाधान है, लेकिन मैं वर्कअराउंड को इस तरह से संदर्भ से अलग रखना पसंद करता हूं जो कोड चेतावनी नहीं देता है।
टिमोथी शूनओवर 14

20

मैंने प्रदाता के लिए कोड-आधारित पंजीकरण का उपयोग किया है। link1 link2

जैसे विन्यास वर्ग बनाया

class DbContextConfiguration : DbConfiguration
{
    public DbContextConfiguration()
    {
        this.SetDatabaseInitializer(new DropCreateDatabaseAlways<MyDbContext>());
        this.SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
    }
}

मुख्य बिंदु यह है। SetProviderServices (SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);

और इसे इस तरह से इस्तेमाल किया

[DbConfigurationType(typeof(DbContextConfiguration))]
public class MyDbContext : DbContext
{
    public MyDbContext()
    {
        ...
    }

    public DbSet<...> ...{ get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        ...
    }
}

मेरे पास एक समाधान में दो परियोजनाएं हैं। पहला वर्ग-पुस्तकालय है जिसमें इकाई फ्रेमवर्क असेंबली के साथ DbContext क्लास और tt-files हैं। दूसरी परियोजना विंडोज़ के रूप हैं जिन्हें एफई-प्रोजेक्ट का उपयोग करके डेटा प्राप्त करना चाहिए। @ नश: क्या आप विस्तृत (जहां किस परियोजना में) आपने अपनी कक्षा रखी है DbContextConfiguration? धन्यवाद
सर्फ करें

जैसा कि ऊपर उल्लेख किया गया है कि ऐसा लगता है कि अतिरिक्त संदर्भों को इसे ठीक करने का एक तरीका है (देखें। मैंने नगेट कंसोल का उपयोग किया और इस कमांड को निकाल दिया: Get-Project MyWinformsProject | Install-Package EntityFrameworkजिसने मेरे लिए इसे ठीक कर दिया। फिर भी मैं इसके कारण को बेहतर ढंग से समझना चाहूंगा।
सर्फ करें

DbContextConfiguration पहले से ही मौजूद था (बनाम 2013), मेरे MyDbContext वर्ग के ऊपर DbConfiguraton लाइन को जोड़ने से मेरे लिए समस्या हल नहीं हुई।
एंडर्स लिंडन

आपको DbConfiguration क्लास की आवश्यकता नहीं है । एप्लिकेशन स्टार्टअप पर निम्नलिखित कोड डालें (ईएफ का उपयोग होने से पहले) DbConfiguration.Loaded += (sender, e) => e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);:।
रोसबर्ग लिन्हार्स

14

मैंने इसे अपने असेंबली इनिशियलाइज़िंग क्लास पर [परिनियोजन इट] से हल किया

namespace MyTests
{
    /// <summary>
    /// Summary description for AssemblyTestInit
    /// </summary>
    [TestClass]
    [DeploymentItem("EntityFramework.SqlServer.dll")]
    public class AssemblyTestInit
    {
        public AssemblyTestInit()
        {
        }

        private TestContext testContextInstance;

        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        [AssemblyInitialize()]
        public static void DbContextInitialize(TestContext testContext)
        {
            Database.SetInitializer<TestContext>(new TestContextInitializer());
        }
    }
}

9

पार्टी के लिए देर से, लेकिन शीर्ष मतदान के जवाब सभी मुझे हैक की तरह लग रहे थे।

मैंने जो कुछ भी किया था, उसे परीक्षण परियोजना में मेरे app.config से हटा दिया था। काम किया।

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

असली समाधान!
बेन एफ

8

मुझे समस्या है, क्योंकि मैं EntityFramework.sqlServer.dll का संदर्भ नहीं जोड़ता। जब मैं कार्यक्रम विकसित करता हूं, तो यह काम करता है। लेकिन जब मैं ऐप प्रकाशित करता हूं और इसे स्थापित करता हूं, तो यह त्रुटि फेंकता है।

मैं सिर्फ संदर्भ जोड़ता हूं और फिर से निर्माण और प्रकाशित करता हूं।

संदर्भ


मैंने यह किया और इसका काम किया। मूल रूप से परियोजना पुस्तकालयों के लिए घटकों को ठीक से संदर्भित नहीं होने पर एक चेतावनी दिखाएगी।
kbvishnu

5

मैंने इसे मुख्य एप्लिकेशन में मैन्युअल रूप से कॉपी EntityFramework.SqlServer.dllफ़ाइल द्वारा हल किया है bin folder


4

मैंने आखिरकार इसका हल निकाल लिया। पता चला, मैंने अपने रिपॉजिटरी वर्ग में IDIsposable का एक गलत कार्यान्वयन किया था। मैंने तय किया कि गलत तरीके से लागू किए जाने से स्टैकओवरफ्लो अपवाद हुआ क्योंकि मैं संसाधनों को ठीक से निपटाना नहीं कर रहा था। इसके कारण VS परीक्षण नहीं चला पाया और परीक्षण निष्पादन इंजन दुर्घटनाग्रस्त हो गया।

मैंने इसे यहां Microsoft के साथ दायर किया (यह सही समाधान मिलने से पहले था)। connect.microsoft.com/VisualStudio/feedback/details/775868/vs-test-execution-crashes-in-vs-2012#details

वैसे भी, बिल्ड अब टीमसिटी पर ठीक चलता है। हालांकि, मैं अभी भी उत्सुक हूं कि न तो वीएस टेस्ट निष्पादन इंजन के पास यह बताने का एक शानदार तरीका था कि टीम सिटी नहीं क्या हो रहा था।

मैंने मूल रूप से परीक्षण को डिबगिंग द्वारा मूल कारण की खोज की (जो मुझे केवल इतने दिनों के बाद ही पता चला, मुझे ठीक करने में 5 सेकंड का समय लगा)।

उम्मीद है कि इससे ऐसे मुद्दों को सुलझाने में मदद मिलेगी।


4

मैं इसी तरह की समस्या को देखता हूं, और इस पोस्ट से विधि का उपयोग कर रहा हूं: ( http://entityframework.codeplex.com/workitem/1590 ), जो मेरी समस्या को हल करता है।

समस्या के चारों ओर काम करने के लिए आप अपनी टेस्ट असेंबली को सीधे असेंबली असेंबली में कहीं भी इस तरह से कुछ लाइन जोड़कर प्रदाता असेंबली का संदर्भ दे सकते हैं: var _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;


3

जब मैंने समस्या का निरीक्षण किया, तो मैंने देखा कि आउटपुट फ़ोल्डर में निम्नलिखित डीएल गायब थे। अगर एप्लिकेशन डिबग मोड पर है तो आउटपुट फ़ोल्डर में App.config के साथ सरल समाधान Entityframework.dll और Entityframework.sqlserver.dll कॉपी है। एक ही समय में परिवर्तन, हमेशा की प्रतिलिपि बनाने के लिए app.config के निर्माण विकल्प पैरामीटर "कॉपी टू आउटपुट फ़ोल्डर"। इससे आपकी समस्या दूर हो जाएगी।


2
मैंने केवल "EntityFramework.SqlServer" के लिए "कॉपी लोकल" को सच किया। अब यह काम कर रहा है।
एलेज़िस

3

बस संदर्भ या ब्राउज़र EF dll - EntityFramework.SqlServer.dll


यह जो मैंने किया है। मेरी लाइब्रेरी से "रनिंग" प्रोजेक्ट के लिए "EntityFramework.SqlServer" के संदर्भ को कॉपी किया गया। वह काम किया!
होकेन के। ओलाफसेन

3

मेरे पास एक ही था I कई बार मैंने कोशिश की लेकिन यह हल नहीं हुआ लेकिन जब मैंने EntityFramework.SqlServerCompact पैकेज स्थापित किया तो उसने Nuget पैकेज मैनेजर से इस पैकेज को इंस्टॉल किया।

Install-Package EntityFramework.SqlServerCompact

3

मैंने एक स्थिर "स्टार्टअप" फ़ाइल बनाई है और इस 'विन्यास' को अलग करने के तरीके के रूप में इसमें DLL को कॉपी करने के लिए DLL को बाध्य करने के लिए कोड जोड़ा है।


[DbConfigurationType(typeof(DbContextConfiguration))] public static class Startup { }

public class DbContextConfiguration : DbConfiguration
{
    public DbContextConfiguration()
    {
        // This is needed to force the EntityFramework.SqlServer DLL to be copied to the bin folder
        SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
    }
}


1
धन्यवाद! यह बहुत बड़ी मदद थी।
एडिसन शूहर्ट्ट

1
खुशी है कि आपको मेरा उत्तर उपयोगी पाया गया है @AddisonSchuhardt :)
hatsrumandcode

2

मैं अपने एप्लिकेशन प्रोजेक्ट में EF का संदर्भ नहीं चाहता (या मैन्युअल रूप से कुछ भी कॉपी कर सकता हूं) इसलिए मैंने इसे अपने EF प्रोजेक्ट के पोस्ट-बिल्ड ईवेंट्स में जोड़ा:

cp $(TargetDir)EntityFramework.SqlServer.dll $(SolutionDir){your-main-bin-folder}

2

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

मैंने पाया कि बस एक वैरिएबल की घोषणा करना जो सही मान का उपयोग करता है समस्या को ठीक करता है ... मैं कभी भी विधि को कॉल नहीं करता। बस इसे परिभाषित करें। अजीब लेकिन यह काम करता है।

    /// <summary>
    /// So that the test runner copies dlls not directly referenced by the integration project
    /// </summary>
    private void referenceLibs()
    {
        var useless = SqlProviderServices.Instance;
    }

2

अन्य सभी सुझाए गए समाधानों की कोशिश करने और काम करने के लिए मेरी परियोजना को प्राप्त नहीं करने के बाद, मुझे आखिरकार इस पृष्ठ में एक छोटी टिप्पणी मिली :

BIN-Folder को डिलीट करना मेरे लिए था

और इसने मेरे लिए भी काम किया।


1
मैं 2 शाखाओं का विलय कर रहा था - मेरी परियोजना में EF से संबंधित कोई परिवर्तन नहीं था, लेकिन मेरे unittests बस बिना किसी कारण के विफल होने लगे। बिन फ़ोल्डर को हटाने से उन्हें फिर से काम करना पड़ा।
अरनो पीटर्स

@ Zeek2 यह त्रुटि एक मुश्किल है। मेरे द्वारा उद्धृत पृष्ठ में इस समस्या को हल करने के लिए कई अलग-अलग सुझाव हैं। यह कई संभावित समाधानों में से एक है। जब तक आप उस समाधान को नहीं खोज लेते, जो आपके विशेष मुद्दे और अच्छे भाग्य पर लागू होगा।
उलेइसेस अल्वेस

1

Entityframework.dll और Entityframework.sqlserver.dll को संदर्भ प्रोजेक्ट में जोड़ने से समस्या हल हो गई।


1

मैंने यूनिट टेस्ट प्रोजेक्ट में डिबग आउटपुट विंडो की जाँच की। EntityFramework.SqlServer.dll लोड नहीं किया गया था। बिन फ़ोल्डर परीक्षणों में इसे जोड़ने के बाद सफलतापूर्वक चलाए गए थे।


1

मुझे भी इसी तरह की समस्या थी

मेरी समस्या का समाधान निम्न प्रकार से किया गया:

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

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


1

मैं DBContextएक इकाई परीक्षण परियोजना से तत्काल वस्तु के साथ एक ही मुद्दा था । मैंने अपनी इकाई परीक्षण परियोजना पैकेजों की जाँच की और मुझे लगा किEntityFramework पैकेज स्थापित नहीं है, मैंने इसे Nuget और समस्या हल होने से स्थापित किया है (मुझे लगता है कि यह EF बग है)।

खुश कोडिंग


0

मेरे पास सिर्फ यही त्रुटि संदेश था।

मेरे पास मेरे डेटा एक्सेस के लिए एक अलग प्रोजेक्ट है। वेब प्रोजेक्ट (जो डेटा प्रोजेक्ट को संदर्भित करता है) चलाना स्थानीय स्तर पर ठीक काम करता है। लेकिन जब मैंने असेंबली को नीलाम करने के लिए वेब प्रोजेक्ट परिनियोजित किया: EntityFramework.SqlServer की प्रतिलिपि नहीं बनाई गई। मैंने अभी वेब प्रोजेक्ट के संदर्भ को जोड़ा और फिर से काम किया, अब यह काम करता है।

आशा है कि यह दूसरों की मदद करता है


0

मैं कॉन्टोसो विश्वविद्यालय के ट्यूटोरियल पर ऑफ़लाइन काम कर रहा था और ईएफ का उपयोग करके अपना पहला नियंत्रक बनाने की कोशिश करते समय उसी मुद्दे का सामना किया। मुझे Nuget कैश से EF लोड करने के लिए पैकेज मैनेजर कंसोल का उपयोग करना पड़ा और SQL सर्वर के मेरे स्थानीय उदाहरण के लिए एक कनेक्शन स्ट्रिंग बनाया, मेरी बात यहाँ EF के लिए मेरी वेबफ़ोन सेटिंग है जो शायद आप सभी को वहाँ सेट नहीं कर सकते लेकिन मैं सक्षम था "UnitFramework" के भीतर "प्रदाताओं" अनुभाग को पूरी तरह से हटाकर मेरे मुद्दे को हल करने के लिए

रॉबर्ट


0

एक आसान तय है। अपने प्रोजेक्ट में संदर्भ खोलें, "System.Data" पर राइट क्लिक करें -> गुण। "कॉपी लोकल" को "ट्रू" में बदलें।

समस्या ठीक होनी चाहिए।


0

मेरे मामले में मैंने SQL Server 2012 डेवलपर संस्करण स्थापित करके समस्या का समाधान किया जब मैंने पहले SQL सर्वर एक्सप्रेस 2012 (x64) स्थापित किया था। ऐसा लगता है कि मुझे लापता निर्भरता प्रदान की।


0

नगेट के माध्यम से परियोजना से इकाई ढांचे को हटा दें और फिर इसे वापस जोड़ें।


0

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


0

यहां सभी उपयोगी सुझावों के अतिरिक्त, यदि आप EF 6.1.3 का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आपकी परियोजना का .net संस्करण 4.5 या अधिक है।

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