Varlık Çerçevesi Sağlayıcı türü yüklenemedi mi?


420

Testlerimi şu anda makinemde yüklü olan TeamCity üzerinde çalıştırmaya çalışıyorum.

System.InvalidOperationException:

Entity Framework sağlayıcı türü ' System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'' System.Data.SqlClient'ADO.NET sağlayıcısı yüklenemedi. Çalışan montaj için sağlayıcı derlemesinin kullanılabilir olduğundan emin olun.

Daha fazla bilgi için http://go.microsoft.com/fwlink/?LinkId=260882 adresine bakın .

System.Data.EntityEF6'ya yükseltmek için codeplex'te önerildiği gibi, projelerimin hiçbirinde referans yok .

Yani, neden bu istisnayı alıyorum emin değilim. VS'den testleri çalıştırdığımda böyle bir istisna almıyorum.

CopyLocal'ı false değerine ayarlayıp tekrar true değerine ayarlamaya çalıştım.

Güncelleme

App.config dosyamda aşağıdakiler var. Bu anlamadığım bir davranışa neden oluyor mu?

<?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>

Teamcity'de aşağıdaki yığın izini alıyorum.

[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 ile birlikte dağıtılıyor mu? EF6'da SqlServer ve SqlServerCE sağlayıcıları, önceki sürümlerde olduğu gibi EF motoruyla aynı montajda değildir. System.Data.Entity.dll dosyasına bir başvuru eklememelisiniz. EF6'daki EF5 sağlayıcısına göre değişen sağlayıcı modeli ve EF5 sağlayıcısı çalışmaz. Buna ek olarak, bazı zor sorunları da (EF6'da varlık türleri olarak değerlendirilen EF5 coğrafi türleri gibi) vurabilirsiniz
Pawel

Evet, System.Data.Entity'ye bir başvuru olmadığını ve EntityFramework.dll ve EntityFramework.SqlServer.dll referansları çift kontrol ettim. Yine projetc VS'de derlenir ve testler yapılır. Sadece ben TeamCity üzerinde çalıştığım zaman hata ortaya çıkar.
ashutosh raina

Bu doğru bir kurulum. TeamCity kullanmadım ama bana uygulamanız TestCity ile testleri çalıştırmak için konuşlandırıldığında EntityFramework.SqlServer.dll eksik ve dolayısıyla istisna gibi görünüyor.
Pawel

1
bu yazının cevabına bakınız: stackoverflow.com/questions/21175713/…private volatile Type _dependency... Cevabı ekledim ve işe yaradı! Sadece EF'in TeamCity'de çalışmasını sağlamak için böyle bir sınıf eklemem gerekecek.
a11smiles

2
EntityFramework'u nuget paketlerinden kaldırdım ve tekrar kurdum ve düzeltildi
abhyudayasrinet

Yanıtlar:


426

Aynı sorun, ama EF 6'yı Nuget üzerinden yükledim. EntityFramework.SqlServer başka bir yürütülebilir dosya için eksikti. Basitçe bu projeye nuget paketini ekledim.


108
Bunu ben de fark ettim. EF kullanan bir kitaplık oluşturursanız, VS EF.dll ve EF.SqlServer.dll dosyasını bu yapı klasörüne koyacaktır. Ancak şimdi kitaplığınızdan yararlanacak başka bir programınız varsa, bu derleme klasörüne yalnızca EF.dll dosyası konacaktır. EF.SqlServer.dll eksik. Derleme klasörüne el ile eklerseniz, program çalışır. Kendi içinde iyi bir çözüm değil, ama sorunun EF.SQLServer.dll eksik hatanın nedeni olduğunu gösterir.
Eric

44
Var x = typeof (System.Data.Entity.SqlServer.SqlProviderServices) ekledim; Sonra benim app çalıştı
Brian

33
Kod yazarken her zaman endişeleniyorum, hiçbir şey yapmıyor ve projem aniden çalışıyor. O_o
Ürdün

10
Ayrıca, derleyici optimizasyonu nedeniyle de yapmak isteyebilirsiniz, x.ToString()ya da typeofSürümündeki s çıkarır .
Ürdün

15
EF 5.0'ın ASPX DLL / Project'imde EF yüklü olması sinir bozucu bulurken, EF 5.0 yalnızca veri katmanı DLL / Project'imde ihtiyaç duyuyordu.
PeterX

274

Test projelerimde de aynı sorun vardı - NuGet aracılığıyla en son EF6 bitlerini kurdum ve EF ile ilgili bir şey her çağırışımda:

'System.Data.SqlClient' ADO.NET sağlayıcısı için 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' türü Entity Framework sağlayıcı türü yüklenemedi. Çalışan montaj için sağlayıcı derlemesinin kullanılabilir olduğundan emin olun. Daha fazla bilgi için http://go.microsoft.com/fwlink/?LinkId=260882 adresine bakın .

Geçici çözümüm: Bu yöntemi test projeme yerleştirdim:

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

Bu yöntem asla çağrılmaz, ancak derleyici tüm "gereksiz" derlemeleri kaldıracak ve Test başarısız EntityFramework.SqlServer şeyler kullanmadan düşünüyorum.

Neyse: Makinemde çalışıyor;)

Not: Projeyi test etmek için yöntem eklemek yerine, Model / varlık projenizden SqlProviderServices'e statik bir başvuru sağlayabilirsiniz .


24
Ben de aynı şeyi yaptım. Bu derlemeyi db ile bağlantı kurmaya bağımlı kılan kişiyle konuşmak istiyorum. Onların alternatif evrende bir bağlantı dizesi ile yapılandırma dosyası olan tüm ön uç projelerimiz sadece bağlantı açmak için bu bir dll almak için EntityFramework referans olmalıdır. Bu nasıl anlamıyorum anlamıyorum.
juhan_h

3
Bu bir saldırı, ancak projeniz için oluşturulmuş bir dağıtım paketinizin olmadığı senaryo için bulduğum en iyi / en kolay çözüm.
Kon

3
"Var x = typeof (SqlProviderServices);" gibi diğer önerileri kullanan hepiniz için. Sadece Robert tarafından sağlanan bu çözüm geliştirme ve inşaat makineleri üzerinde çalışıyor !!!
Alexander Schmidt

3
Teşekkürler Robert, EF ekibi tarafından saçma, ama yine de benim için çalışıyor.
Hitesh

7
Açık olmak gerekirse: DbContextSınıfınıza yukarıdaki kodu eklemek EF 6.1'deki sorunu çözecektir. Bu şekilde Entity Framework Nuget paketini ön uç (WebApi vb.) Projenize dahil etmenize gerek yoktur ve EF ile ilgili her şeyi veri katmanınızda bırakabilirsiniz.
Nick

106

Nuget, EF6 projenizi EntityFramework.SqlServer.dll dosyasına başvuracak şekilde yapılandıracaktır. Bu, derleme sırasında EF6 projenizin çıktı klasörüne dağıtılır, ancak EF6 projenizi referans alan projeler için çıktı klasörüne dağıtılmaz. Bunun Visual Studio derlemenizde hiçbir şey aslında doğrudan dll kullandığını algılamak için yeterince "akıllı" olduğuna inanıyorum ve bu yüzden içermez. EntityFramework.SqlServer.dll dosyasını, EntityFramework.SqlServer.dll kullanan EF6 projenize kod ekleyerek EF6 projenize (birim testleri, kullanıcı arabirimi vb.) Başvuran projelerin çıktı klasörüne dağıtılmasını zorlayabilirsiniz. Kodu bir sonraki yenilemede kaybetme riskiyle oluşturduğunuz bir sınıfa koymamaya dikkat edin. Sorunu çözen derlemeye aşağıdaki sınıfı eklemeyi seçtim.

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
Bu benim için MSTest ile ilgili sorunu çözdü. Bu yöntemi seviyorum çünkü test sınıflarımda sınıf mirasıyla dağınık bir şey yapmam gerekmiyor. Sınıfı test düzeneğinde ve MAGIC'te bir yere dahil edin. Teşekkürler!
kbrimington

Tam olarak, bu sqlserver.dll başvuru projeleri çıktı kopyalamıyor nedeni budur. Bu, uygulama yürütme ve Bağlam derleme arasında bir katman daha olduğunda oluşur. Teşekkürler bu sorunumu çözdü.
Bharat

2
Aramak için 4 saniye harcamak istemeyenler için: System.Data.Entity.SqlServer kullanarak;
TTT

Birim testleri için ortak bir temel sınıf kullanıyoruz, tüm birim testleri bu sınıftan miras alıyor. Bu yöntemi bir sınıfa eklemek, temel sınıftan devralınan birim test sınıfına sahip tüm projelerin düzgün çalıştığı anlamına gelir.
MaxJ

3
Küçük bir nokta, ama muhtemelen neden gerekli olduğunu açıklamak için bu sınıfa bir yorum eklemek en iyisidir.
John Darvill

43

Çözümüm, varlık çerçevesini nuget yöneticisi aracılığıyla projeden kaldırmak ve tekrar eklemekti.


9
PM> Update-Package -Reinstall "EntityFramework" -ProjectName "MyProj1"
VahidN

Bu benim için işe yaradı ve bence bu en uygun çözüm olabilir
ccoutinho

Çalışan basit, temiz bir çözüm. Listede çok daha yüksek olmalı
mode777 10:18

29

Bu benim DBContext sınıfının üstüne kullanarak bir stament ekleyerek çözüldü:

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

1
Bu, bu soruna en temiz çözümdür. Teşekkür ederim.
Alexandru Dicu

Bu çözüm çalışır ve temiz görünür. Soru: DBContext sınıfının yenilendiği satır kimliğini kaybetmeyeceğiz mi? yani edmx sınıf neslini mi kullanıyorsunuz?
NoloMokgosi

Bunun gerekli olduğuna ve bir şekilde Microsoft tarafından düzeltilmediğine inanamıyorum - ama bu benim için çalıştı. Basit bir çözüm için teşekkürler.
Çar Bomba

Bu çözüm işlevsel olarak MissingDllHack ile aynıdır . Daha temiz görünebilir, ancak bağlam sınıfınıza geçici çözüm kodu ekler. Bu kod ayrıca ReSharper gibi araçlar tarafından kaldırılmak üzere işaretlenir ve zaman içinde kolayca kaybolabilir. İyi bir çözüm, ancak geçici uyarıyı kod uyarıları üretmeyecek şekilde bağlamdan ayrı tutmayı tercih ediyorum.
Timothy Schoonover

20

Sağlayıcı için Kod tabanlı kaydı kullandım. link1 bağlantı2

Sadece yapılandırma sınıfını oluşturduk.

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

Anahtar nokta şudur: SetProviderServices (SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);

ve öyle kullandım

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

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

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

Bir çözümde iki projem var. Birincisi, bir DbContext sınıfı ve tt dosyalarıyla varlık çerçevesi derlemesine sahip sınıf kitaplığıdır. İkinci proje, ef-project kullanarak veri alması gereken Windows formlarıdır. @Nash: Sınıfınızı nereye (hangi projeye) yerleştirdiğinizi açıklayabilir misiniz DbContextConfiguration? Thanks
surfmuggle

Yukarıda belirtildiği gibi, ek referansların bunu düzeltmenin bir yolu olduğu görülmektedir (eric'ten yoruma bakınız). Nuget konsolunu kullandım ve bu komutu ateşledim: Get-Project MyWinformsProject | Install-Package EntityFrameworkbu benim için düzeltildi. Hala sebebini daha iyi anlamak istiyorum.
gezinme

DbContextConfiguration zaten mevcut gibi görünüyordu (2013'e karşı), MyDbContext sınıfımın üstüne DbConfiguraton satırını eklemek sorunu benim için çözmedi.
Anders Lindén

Bir DbConfiguration sınıfına ihtiyacınız yoktur . Aşağıdaki kodu uygulama başlangıcına koyun (EF kullanılmadan önce):DbConfiguration.Loaded += (sender, e) => e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance); .
Rosberg Linhares

14

Montaj başlangıç ​​sınıfımda [DeploymentItem] ile dizildi

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

Partiye geç, ama en çok oy alan cevaplar bana hack gibi geldi.

Tek yaptığım aşağıdakileri test projesindeki app.config dosyasından kaldırmaktı. Çalışmış.

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

Gerçek çözüm!
Ben F

8

EntityFramework.sqlServer.dll başvuru eklemiyorum çünkü sorunum var. Program geliştirdiğimde işe yarıyor. Ancak uygulamayı yayınlayıp yüklediğimde hata veriyor.

Sadece referans ekliyorum ve yeniden oluştur ve yayınla.

Referanslar


Bunu yaptım ve çalıştı. Temelde proje, kütüphaneler için uygun bir şekilde atıfta bulunulmadığında bileşenler bir uyarı gösterir.
kbvishnu

5

El ile kopyalayarak bu çözmüş EntityFramework.SqlServer.dlldosyayı bin folderana uygulama.


4

Sonunda bunu çözdüm. Anlaşılan, depo sınıfımda IDIsposable'ın hatalı bir uygulaması vardı. Bunu düzelttim. Hatalı uygulama, kaynakları düzgün bir şekilde bertaraf etmediğim için yığın akışı istisnasına neden oldu. Bu VS'nin testleri çalıştırmamasına neden oldu ve test yürütme motoru çöktü.

Burada Microsoft'a dosyaladım (bu doğru çözümü elde etmeden önceydi). connect.microsoft.com/VisualStudio/feedback/details/775868/vs-test-execution-crashes-in-vs-2012#details

Her neyse, yapılar şimdi teamcity'de iyi çalışıyor. Yine de, VS Test yürütme motorunun neden Team City'de değil neler olduğunu anlatmanın zarif bir yolu olmadığını merak ediyorum.

Temel nedeni, testi manuel olarak hata ayıklayarak keşfettim (sadece çok gün sonra fark ettim, düzeltme 5 saniye sürdü).

Umarım bu, bu tür sorunlarla karşılaşan birine yardımcı olacaktır.


4

Benzer sorunu görüyorum ve bu yazıdaki yöntemi kullanarak: ( http://entityframework.codeplex.com/workitem/1590 ), bu da sorunumu çözdü.

Bu soruna geçici bir çözüm bulmak için, test derlemenizin, test derlemesinin herhangi bir yerine böyle bir satır ekleyerek sağlayıcı derlemesine doğrudan başvuruda bulunmasını sağlayabilirsiniz: var _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;


3

Sorunu incelediğimde, aşağıdaki dll çıktı klasöründe eksik olduğunu fark ettim. Basit bir çözüm, uygulama hata ayıklama modundaysa Entityframework.dll ve Entityframework.sqlserver.dll dosyasını app.config ile çıktı klasörüne kopyalayın. Aynı zamanda, her zaman kopyalamak için app.config dosyasının "Çıkış klasörüne kopyala" oluşturma seçeneği parametresi. Bu sorununu çözecektir.


2
Yalnızca "EntityFramework.SqlServer" için "Yerel Kopyala" ayarını yaptım. Şimdi çalışıyor.
Alezis

3

Basitçe EF dll referans veya tarayıcı - EntityFramework.SqlServer.dll


Ben de öyle yaptım. Referansı kütüphanemden "çalışan" projeye "EntityFramework.SqlServer" kopyaladı. İşe yaradı!
Håkon K. Olafsen

3

Ben birçok kez denedim aynı isssue vardı ama çözmedi ama paket EntityFramework.SqlServerCompact yüklediğinizde bu paketi Nuget paket Yöneticisi'nden yükleyin çözüldü.

Install-Package EntityFramework.SqlServerCompact

3

Ben statik bir "başlangıç" dosyası oluşturduk ve bu 'yapılandırma' ayırmak için bir yol olarak bin klasörüne DLL kopyalanacak zorlamak için kod ekledim.


[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
Teşekkürler! Bu çok yardımcı oldu.
Addison Schuhardt

1
Cevabımı yararlı bulduğunuza sevindim @AddisonSchuhardt :)
hatsrumandcode

2

Uygulama projemde EF'e (ya da elle herhangi bir şeyi kopyalamak için) başvurmak istemedim.

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

2

Bu sadece yük / birim test projelerimde olur. Sinir bozucu, 2 yıldır yürüttüğüm bir projede ortaya çıkmasını sağladım. Bazı şeyleri kıran bir deneme çalışması olmalı. Sanırım bu fi gittiğinde gitti.

Ben sadece doğru değeri kullanan bir değişken bildirmek sorunu giderir bulundu ... Ben bile yöntemi çağırmak bile. Sadece tanımla. Tuhaf ama işe yarıyor.

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

2

Önerilen tüm diğer çözümleri denedikten ve projemi işe koymadıktan sonra, sonunda bu sayfada küçük bir yorum buldum :

BIN Klasörünü silmek benim için yaptı

Ve o da benim için çalıştı.


1
2 şubeyi birleştiriyordum - projemde EF ile ilgili herhangi bir değişiklik olmadı, ancak birim testlerim sebepsiz yere başarısız olmaya başladı. BIN klasörünün silinmesi onları tekrar çalıştırdı.
Arno Peters

@ Zeek2 bu hata zor bir hata. Alıntıladığım sayfada bu sorunu çözmek için birçok farklı öneri var. Bu, birçok olası çözümden sadece biridir. Sorununuz için geçerli olan çözümü bulana kadar araştırmaya devam edin ve iyi şanslar.
Ulysses Alves

1

Referans projeye Entityframework.dll ve Entityframework.sqlserver.dll dosyalarının eklenmesi sorunu çözdü.


1

Unit Test projesinde Debug Output penceresini kontrol ettim. EntityFramework.SqlServer.dll yüklenmedi. Bin klasörüne ekledikten sonra testler başarıyla gerçekleştirildi.



1

DBContextBir birim test projesinden Instantiating nesnesiyle aynı sorunu yaşadım . Birim testi proje paketlerimi kontrol ettim veEntityFramework paketin kurulmadığını Nuget'ten kurdum ve problem çözüldü (bence EF hatası).

mutlu kodlama


0

Aynı hata mesajını aldım.

Veri erişimim için ayrı bir projem var. Web Projesi'ni çalıştırmak (veri projesine gönderme yapan) yerel olarak iyi çalıştı. Ancak derlemeyi azure etmek için web projesini dağıttığımda: EntityFramework.SqlServer kopyalanmadı. Web projesine referansı yeni ekledim ve yeniden konuşlandırdım, şimdi çalışıyor.

umarım bu başkalarına yardımcı olur


0

Contoso Üniversitesi eğitiminde çevrimdışı çalışıyordum ve EF kullanarak ilk denetleyicimi oluşturmaya çalışırken aynı sorunla karşılaştım. Nuget önbelleğinden EF yüklemek için Paket Yöneticisi Konsolu kullanmak zorunda kaldı ve yerel SQL Server örneğime bir bağlantı dizesi oluşturdum, burada benim noktam EF için benim webConfig ayarı orada hepiniz olarak ayarlanmamış olabilir ama başardım "entityFramework" içindeki "sağlayıcılar" bölümünü tamamen silerek sorunumu çözme

Robert


0

Kolay bir düzeltme var. projenizdeki referansları açın, "System.Data" -> özelliklerine sağ tıklayın. "Yerel Kopyala" yı "Doğru" olarak değiştirin.

Sorun giderilmelidir.


0

Benim durumumda, daha önce SQL Server Express 2012'yi (x64) yüklediğimde SQL Server 2012 Developer Edition'ı yükleyerek sorunu çözdüm. Görünüşe göre bana eksik bağımlılık sağladı.


0

varlık çerçevesini nuget yoluyla projeden kaldırın ve tekrar ekleyin.


0

Benim durumumda dllbir referans eklememe rağmen kopyalanmadı. Bunun nedeni EntityFramework.SqlServer.dllprojenize kopyalanmadığıdır. Bu dll ekleyin ve umarım işe yarar.Onları veri modeli eklediğiniz projeden bulabilirsiniz.


0

Buradaki tüm yararlı önerilere ek olarak, EF 6.1.3 kullanıyorsanız, projenizin .net sürümünün 4.5 veya daha fazla olduğundan emin olun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.