Jenis Penyedia Kerangka Entitas tidak dapat dimuat?


420

Saya mencoba menjalankan tes saya di TeamCity yang saat ini diinstal pada mesin saya.

System.InvalidOperationException:

Jenis penyedia Entity Framework ' System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'untuk System.Data.SqlClient' ADO.NET provider 'tidak dapat dimuat. Pastikan rakitan penyedia tersedia untuk aplikasi yang sedang berjalan.

Lihat http://go.microsoft.com/fwlink/?LinkId=260882 untuk informasi lebih lanjut ..

Saya tidak punya referensi System.Data.Entitydalam proyek saya seperti yang disarankan pada codeplex untuk meningkatkan ke EF6.

Jadi, saya tidak yakin mengapa saya mendapatkan pengecualian ini. Saya tidak mendapatkan pengecualian seperti itu ketika saya menjalankan tes dari VS.

Saya memang mencoba untuk mengatur CopyLocal menjadi false kemudian lagi menjadi true .. tapi itu sepertinya tidak berhasil juga.

Memperbarui

App.config saya memiliki yang berikut ini. Apakah ini menyebabkan beberapa perilaku yang tidak saya mengerti?

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

Saya mendapatkan stacktrace berikut di teamcity.

[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
Apakah EntityFramework.SqlServer.dll digunakan bersama dengan EntityFramework.dll? Di EF6 SqlServer dan SqlServerCE, penyedia tidak berada dalam rakitan yang sama dengan mesin EF seperti pada versi sebelumnya. Anda tidak boleh menambahkan referensi ke System.Data.Entity.dll. Model penyedia di EF6 berubah dibandingkan dengan penyedia EF5 dan EF5 tidak akan berfungsi. Selain itu, Anda dapat menemukan beberapa masalah rumit (seperti tipe geospasial EF5 yang diperlakukan sebagai tipe entitas di EF6)
Pawel

Ya saya telah memeriksa ulang tidak ada referensi untuk System.Data.Entity dan referensi untuk EntityFramework.dll dan EntityFramework.SqlServer.dll ada. Sekali lagi projetc mengkompilasi dan menjalankan tes dalam VS. Hanya ketika saya menjalankan tes di TeamCity kesalahan muncul.
ashutosh raina

Ini adalah pengaturan yang benar. Saya belum pernah menggunakan TeamCity tetapi bagi saya tampaknya ketika aplikasi Anda digunakan untuk menjalankan tes dengan TeamCity, EntityFramework.SqlServer.dll hilang dan karenanya pengecualian.
Pawel

1
lihat jawaban dari posting ini: stackoverflow.com/questions/21175713/... Saya menambahkan private volatile Type _dependency...jawabannya dan berhasil! Hanya saja saya harus menambahkan kelas terpisah seperti ini hanya untuk membuat EF bekerja di TeamCity.
a11smiles

2
Saya mencopot EntityFramework dari paket nuget dan diinstal lagi dan diperbaiki
abhyudayasrinet

Jawaban:


426

Masalah yang sama, tetapi saya menginstal EF 6 melalui Nuget. EntityFramework.SqlServer tidak ada untuk dieksekusi. Saya hanya menambahkan paket nuget ke proyek itu.


108
Saya perhatikan ini juga. Jika Anda membuat perpustakaan yang menggunakan EF, VS akan memasukkan EF.dll dan EF.SqlServer.dll ke folder build itu. Tetapi jika sekarang Anda memiliki program lain menggunakan perpustakaan Anda, hanya EF.dll yang akan dimasukkan ke dalam folder build ini. EF.SqlServer.dll hilang. Jika Anda menambahkannya secara manual ke folder build, program ini berfungsi. Bukan solusi yang baik dalam dirinya sendiri, tetapi menunjukkan masalahnya adalah EF.SQLServer.dll hilang adalah penyebab kesalahan.
Eric

44
Saya menambahkan var x = typeof (System.Data.Entity.SqlServer.SqlProviderServices); Kemudian aplikasi saya bekerja
Brian

33
Saya selalu khawatir ketika saya mengetikkan kode yang tidak melakukan apa-apa dan tiba-tiba proyek saya berjalan. O_o
Jordan

10
Juga, karena optimisasi kompiler Anda mungkin ingin juga melakukannya x.ToString()atau itu akan mengeluarkan typeofs di Rilis.
Jordan

15
Saya merasa menjengkelkan bahwa EF 6.1 sekarang membutuhkan EF diinstal pada ASPX DLL / Project saya, sedangkan EF 5.0 hanya membutuhkannya pada DLL / Project layer data saya.
PeterX

274

Saya memiliki masalah yang sama dalam proyek Uji saya - saya memasang bit EF6 terbaru melalui NuGet dan setiap kali saya memanggil sesuatu yang berhubungan dengan EF, saya mendapat:

Penyedia Entity Framework ketik 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' untuk penyedia ADO.NET 'System.Data.SqlClient' tidak dapat dimuat. Pastikan rakitan penyedia tersedia untuk aplikasi yang sedang berjalan. Lihat http://go.microsoft.com/fwlink/?LinkId=260882 untuk informasi lebih lanjut.

Solusi saya: Saya menempatkan metode ini di dalam proyek pengujian saya:

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

Metode ini tidak pernah dipanggil, tapi saya pikir kompiler akan menghapus semua rakitan "yang tidak perlu" dan tanpa menggunakan hal-hal EntityFramework.SqlServer tes gagal.

Anyways: Bekerja pada mesin saya;)

Catatan: Alih-alih menambahkan metode untuk menguji proyek Anda dapat memastikan referensi statis untuk SqlProviderServices dari proyek Model / entitas Anda .


24
Saya akhirnya melakukan hal yang sama. Saya ingin berbicara dengan orang yang menjadikan majelis ini ketergantungan untuk membuka koneksi ke db. Dalam semesta alternatif mereka semua proyek frontend kami yang memiliki file konfigurasi dengan string koneksi harus merujuk EntityFramework hanya untuk mendapatkan dll ini untuk membuka koneksi. Dalam hal apa masuk akal saya tidak mengerti.
juhan_h

3
Ini adalah retasan, tapi ini solusi terbaik / termudah yang saya temukan untuk skenario di mana Anda tidak memiliki paket penerapan yang dibuat untuk proyek Anda.
Kon

3
Untuk Anda semua yang menggunakan saran lain seperti "var x = typeof (SqlProviderServices);". Hanya solusi ini yang disediakan oleh Robert yang bekerja pada pengembangan dan pembuatan mesin !!!
Alexander Schmidt

3
Terima kasih Robert, ini konyol oleh tim EF, tetapi bagaimanapun juga itu berhasil bagi saya.
Hitesh

7
Agar lebih jelas: Menambahkan kode di atas ke DbContextkelas Anda akan menyelesaikan masalah di EF 6.1. Dengan cara ini Anda tidak perlu menyertakan paket Entity Framework Nuget dalam proyek front-end Anda (WebApi, dll) dan dapat meninggalkan semua yang terkait dengan EF di lapisan data Anda.
Nick

106

Nuget akan mengonfigurasi proyek EF6 Anda untuk referensi EntityFramework.SqlServer.dll. Ini menyebarkan ke folder output untuk proyek EF6 Anda selama membangun, tetapi tidak akan menyebar ke folder output untuk proyek referensi proyek EF6 Anda. Saya percaya ini karena Visual Studio "pintar" cukup untuk mendeteksi bahwa tidak ada dalam perakitan Anda yang benar-benar menggunakan dll secara langsung sehingga tidak memasukkannya. Anda dapat memaksa EntityFramework.SqlServer.dll untuk dikerahkan ke folder keluaran proyek yang merujuk proyek EF6 Anda (unit test, UI, dll.) Dengan menambahkan kode ke proyek EF6 Anda yang menggunakan EntityFramework.SqlServer.dll. Berhati-hatilah untuk tidak meletakkan kode di kelas yang dibuat karena Anda berisiko kehilangannya di regen berikutnya. Saya memilih untuk menambahkan kelas berikut ke majelis, yang memperbaiki masalah.

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
Ini memecahkan masalah bagi saya sehubungan dengan MSTest. Saya suka metode ini karena tidak mengharuskan saya melakukan sesuatu yang berantakan dengan kelas warisan pada kelas tes saya. Cukup sertakan kelas di suatu tempat di majelis tes dan MAGIC. Terima kasih!
kbrimington

Tepat, ini adalah alasan tidak menyalin sqlserver.dll ke output proyek referensi. Ini terjadi ketika Anda memiliki satu lapisan lagi di antara menjalankan aplikasi dan perakitan Konteks. Terima kasih ini menyelesaikan masalah saya.
Bharat

2
Bagi yang tidak ingin menghabiskan waktu 4 detik mencarinya: menggunakan System.Data.Entity.SqlServer;
TTT

Kami menggunakan kelas dasar umum untuk tes unit, semua tes unit mewarisi dari kelas ini. Menambahkan metode ini ke satu kelas berarti bahwa semua proyek dengan kelas uji unit yang mewarisi dari kelas dasar berfungsi dengan baik.
Maks

3
Poin kecil, tapi mungkin sebaiknya menambahkan komentar ke kelas ini untuk menjelaskan mengapa itu perlu.
John Darvill

43

Solusi saya adalah menghapus kerangka entitas dari proyek melalui manajer nuget dan menambahkannya kembali.


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

Ini berhasil bagi saya, dan saya pikir itu mungkin solusi optimal
ccoutinho

Solusi sederhana dan bersih yang berfungsi. Seharusnya jauh lebih tinggi dalam daftar
mode777

29

Saya memecahkan ini dengan menambahkan stament menggunakan di atas kelas DBContext saya, seperti:

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

1
Ini adalah solusi terbersih untuk masalah ini. Terima kasih.
Alexandru Dicu

Solusi ini berfungsi dan terlihat bersih. Pertanyaan: tidakkah kita kehilangan id baris kelas DBContext di-refresh? yaitu menggunakan generasi kelas edmx?
NoloMokgosi

Tidak percaya ini perlu dan entah bagaimana belum diperbaiki oleh Microsoft - tetapi ini berhasil bagi saya. Terima kasih atas solusi sederhana.
Tsar Bomba

Solusi ini secara fungsional sama dengan MissingDllHack . Ini mungkin tampak lebih bersih, tetapi memperkenalkan kode solusi ke kelas konteks Anda. Kode ini juga akan ditandai untuk dihapus oleh alat seperti ReSharper dan dapat dengan mudah hilang seiring waktu. Solusi yang bagus, tetapi saya lebih memilih untuk menjaga solusi terpisah dari konteks dengan cara yang tidak menghasilkan peringatan kode.
Timothy Schoonover

20

Saya telah menggunakan registrasi berbasis kode untuk provider. link1 link2

Baru saja membuat kelas konfigurasi seperti

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

Poin kuncinya adalah ini. SetProviderServices (SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);

dan menggunakannya sedemikian rupa

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

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

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

Saya punya dua proyek dalam satu solusi. Yang pertama adalah pustaka kelas dengan susunan kerangka entitas sebuah kelas DbContext dan file-tt. Proyek kedua adalah formulir windows yang harus mendapatkan data dengan menggunakan ef-proyek. @Nash: Bisakah Anda menguraikan di mana (ke proyek mana) Anda menempatkan kelas Anda DbContextConfiguration? Terima kasih
surfmuggle

Seperti disebutkan di atas, tampaknya bahwa referensi tambahan adalah salah satu cara untuk memperbaikinya (lihat komentar dari eric). Saya menggunakan konsol nuget dan menjalankan perintah ini: Get-Project MyWinformsProject | Install-Package EntityFrameworkyang memperbaikinya untuk saya. Saya masih ingin lebih memahami alasannya.
surfmuggle

DbContextConfiguration tampaknya sudah ada (vs 2013), menambahkan garis DbConfiguraton di atas kelas MyDbContext saya tidak memecahkan masalah bagi saya.
Anders Lindén

Anda tidak memerlukan kelas DbConfiguration . Letakkan kode berikut di aplikasi startup (sebelum EF digunakan): DbConfiguration.Loaded += (sender, e) => e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);.
Rosberg Linhares

14

Saya mengatasinya dengan [DeploymentItem] pada kelas inisialisasi perakitan saya

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

Terlambat ke pesta, tetapi jawaban teratas memilih semua tampak seperti hack bagiku.

Yang saya lakukan adalah menghapus yang berikut dari app.config saya di proyek uji. Bekerja.

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

Solusi nyata!
Ben F

8

Saya punya masalah, karena saya tidak menambahkan referensi ke EntityFramework.sqlServer.dll. Ketika saya mengembangkan program, itu berhasil. Tetapi ketika saya mempublikasikan aplikasi dan menginstalnya, ia melempar kesalahan.

Saya hanya menambahkan referensi dan Bangun dan Terbitkan lagi.

Referensi


Saya melakukan ini dan berhasil. Pada dasarnya proyek akan menunjukkan peringatan ketika komponen-komponen ke perpustakaan tidak dirujuk dengan benar.
kbvishnu

5

Saya telah memecahkan masalah ini dengan menyalin EntityFramework.SqlServer.dllfile secara manual ke bin folderaplikasi utama.


4

Saya akhirnya menyelesaikan ini. Ternyata, saya memiliki implementasi IDIsposable yang salah di kelas repositori saya. Saya memperbaikinya. Implementasi yang salah menyebabkan pengecualian stackoverflow karena saya tidak membuang sumber daya dengan benar. Hal ini menyebabkan VS tidak menjalankan tes dan mesin pelaksanaan tes jatuh.

Saya mengajukannya ke Microsoft di sini (ini sebelum saya mendapatkan solusi yang benar). connect.microsoft.com/VisualStudio/feedback/details/775868/vs-test-execution-crashes-in-vs-2012#details

Bagaimanapun, build sekarang berjalan dengan baik di teamcity. Meskipun, saya masih penasaran mengapa mesin eksekusi VS Test tidak memiliki cara yang baik untuk mengatakan kepada saya apa yang terjadi bukan Team City.

Saya menemukan akar masalah dengan secara manual men-debug tes (yang baru saya sadari setelah beberapa hari, perbaikannya membutuhkan waktu 5 detik).

Semoga ini akan membantu seseorang yang menemukan masalah seperti itu.


4

Saya melihat masalah yang sama, dan menggunakan metode dari posting ini: ( http://entityframework.codeplex.com/workitem/1590 ), yang memecahkan masalah saya.

Untuk mengatasi masalah ini, Anda dapat membuat rakitan pengujian Anda langsung merujuk rakitan penyedia dengan menambahkan beberapa baris seperti ini di mana saja dalam rakitan uji: var _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;


3

Ketika saya memeriksa masalahnya, saya perhatikan bahwa dll berikut tidak ada di folder output. Solusi sederhananya adalah menyalin Entityframework.dll dan Entityframework.sqlserver.dll dengan app.config ke folder output jika aplikasi berada pada mode debug. Pada saat yang sama berubah, parameter opsi build "Salin ke folder keluaran" app.config untuk selalu menyalin. Ini akan menyelesaikan masalah Anda.


2
Saya menyiapkan "Salin Lokal" hanya untuk "EntityFramework.SqlServer". Sekarang berhasil.
Alezis

3

Cukup referensi atau peramban dll EF - EntityFramework.SqlServer.dll


Inilah yang saya lakukan. Menyalin Referensi ke "EntityFramework.SqlServer" dari perpustakaan saya ke proyek "running". Itu berhasil!
Håkon K. Olafsen

3

Saya memiliki masalah yang sama saya mencoba berkali-kali tetapi tidak menyelesaikan tetapi ketika saya menginstal paket EntityFramework.SqlServerCompact itu diselesaikan menginstal paket ini dari paket manajer Nuget.

Install-Package EntityFramework.SqlServerCompact

3

Saya telah membuat file "startup" statis dan menambahkan kode untuk memaksa DLL untuk disalin ke folder bin di dalamnya sebagai cara untuk memisahkan 'konfigurasi' ini.


[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
Terima kasih! Ini sangat membantu.
Addison Schuhardt

1
Senang Anda telah menemukan jawaban saya bermanfaat @AddisonSchuhardt :)
hatsrumandcode

2

Saya tidak ingin referensi ke EF di proyek aplikasi saya (atau untuk menyalin apa pun secara manual) jadi saya menambahkan ini ke acara Post-build proyek EF saya:

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

2

Ini hanya terjadi di dalam proyek pengujian load / unit saya. Frustasi, saya baru saja muncul dalam proyek yang telah saya jalankan selama 2 tahun. Pasti ada urutan uji coba yang merusak segalanya. Saya kira begitu fi yang dihapus itu hilang.

Saya menemukan bahwa hanya mendeklarasikan variabel yang menggunakan nilai yang benar memperbaiki masalah ... Saya bahkan tidak pernah memanggil metode. Cukup tentukan saja. Aneh tapi berhasil.

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

2

Setelah mencoba semua solusi yang disarankan dan tidak membuat proyek saya berfungsi, saya akhirnya menemukan sedikit komentar di halaman ini :

Menghapus Folder BIN berhasil untuk saya

Dan itu berhasil juga untuk saya.


1
Saya menggabungkan 2 cabang - proyek saya tidak memiliki perubahan yang terkait dengan EF, tetapi unittests saya mulai gagal tanpa alasan. Menghapus folder BIN membuat mereka berfungsi kembali.
Arno Peters

@ Zeek2 kesalahan ini rumit. Ada banyak saran berbeda untuk menyelesaikan masalah ini di halaman yang saya kutip. Ini hanyalah salah satu dari banyak solusi yang mungkin. Terus merisetnya sampai Anda menemukan solusi yang akan berlaku untuk masalah khusus Anda, dan semoga sukses.
Ulysses Alves

1

Menambahkan Entityframework.dll dan Entityframework.sqlserver.dll ke proyek referensi menyelesaikan masalah.


1

Saya memeriksa jendela Debug Output di proyek Unit Test. EntityFramework.SqlServer.dll tidak dimuat. Setelah menambahkannya ke folder bin tes berhasil dijalankan.


1

Saya juga punya masalah serupa

Masalah saya terpecahkan dengan melakukan hal berikut:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini


1

Saya memiliki masalah yang sama dengan DBContextobjek Instantiating dari proyek unit test. Saya memeriksa paket proyek pengujian unit saya dan saya pikir EntityFrameworkpaket itu tidak diinstal, saya menginstalnya dari Nuget dan masalah terpecahkan (saya pikir itu bug EF).

selamat coding


0

Saya baru saja pesan kesalahan yang sama.

Saya memiliki proyek terpisah untuk akses data saya. Menjalankan Proyek Web (yang merujuk proyek data) secara lokal berfungsi dengan baik. Tetapi ketika saya menggunakan proyek web untuk membuat biru majelis: EntityFramework.SqlServer tidak disalin. Saya baru saja menambahkan referensi ke proyek web dan dipindahkan, sekarang berfungsi.

Semoga ini bisa membantu orang lain


0

Saya sedang mengerjakan tutorial Universitas Contoso offline dan mengalami masalah yang sama ketika mencoba membuat pengontrol pertama saya menggunakan EF. Saya harus menggunakan Package Manager Console untuk memuat EF dari cache nuget dan membuat string koneksi ke instance lokal saya dari SQL Server, maksud saya di sini adalah pengaturan webConfig saya untuk EF mungkin tidak ditetapkan seperti Anda semua di luar sana tetapi saya bisa untuk menyelesaikan masalah saya dengan menghapus bagian "penyedia" di dalam "entityFramework"

Robert


0

Ada perbaikan yang mudah. buka referensi di proyek Anda, klik kanan "System.Data" -> properti. Ubah "Salin Lokal" ke "Benar".

Masalah harus diperbaiki.


0

Dalam kasus saya, saya menyelesaikan masalah dengan menginstal SQL Server 2012 Developer Edition ketika saya sebelumnya menginstal SQL Server Express 2012 (x64). Tampaknya memberi saya ketergantungan yang hilang.


0

hapus kerangka entitas dari proyek melalui nuget lalu tambahkan kembali.


0

Dalam kasus saya dlltidak disalin meskipun saya menambahkan referensi. Ini karena EntityFramework.SqlServer.dlltidak disalin ke proyek Anda. Tambahkan dll itu dan semoga akan bekerja. Anda dapat menemukannya dari proyek tempat Anda menambahkan model data.


0

Tambahan untuk semua saran yang bermanfaat di sini, jika Anda menggunakan EF 6.1.3, pastikan versi .net proyek Anda adalah 4,5 atau lebih.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.