Penyedia Entity Framework tidak ditemukan untuk penyedia ADO.NET dengan nama invarian 'System.Data.SqlClient'


543

Setelah mengunduh EF6 dengan nuget dan mencoba menjalankan proyek saya, itu mengembalikan kesalahan berikut:

Penyedia Entity Framework tidak ditemukan untuk penyedia ADO.NET dengan nama invarian 'System.Data.SqlClient'. Pastikan penyedia terdaftar di bagian 'entitasFramework' pada file konfigurasi aplikasi. Lihat http://go.microsoft.com/fwlink/?LinkId=260882 untuk informasi lebih lanjut.

masukkan deskripsi gambar di sini


Saya menggunakan EF5 tanpa providersdan providersebagainya, jadi pertimbangkan untuk menghapusnya?
ta.speot.is

1
letakkan salinan string koneksi Anda di sini
pylover

String koneksi ada di gambar (App.confing), omong-omong sangat sederhana, saya memanggil konstruktor public BaseStorage(): base ("RaptorDB") {},, BaseStorage () mewarisi dari DbContext di EF5 semuanya bekerja dengan baik, belum di EF6.
Fernando Vellozo

10
Masalah akan diselesaikan dengan menginstal EF6, proyek kedua (Konsol), terima kasih kepada semua orang yang telah membantu!
Fernando Vellozo

3
Bagi saya, ini sepertinya disebabkan oleh Visual Studio tidak menyadari bahwa perakitan EntityFramework.SqlServer sebenarnya digunakan oleh proyek basis. Jika Anda melakukan sesuatu seperti jawaban @ Carra , Anda tidak perlu menambahkan EF ke setiap proyek yang merujuk proyek dasar Anda - jauh lebih bersih.
tehDorf

Jawaban:


608

Saya baru saja mengalami masalah yang sama dan sepertinya EntityFramework meskipun diinstal dari Package Manager NuGet tidak diinstal dengan benar dalam proyek.

Saya berhasil memperbaikinya dengan menjalankan perintah berikut di Package Manager Console :

PM> Install-Package EntityFramework

34
PMC menulis bahwa 'EntityFramework 6.0.1' sudah diinstal, tetapi menambahkannya ke aplikasi konsol saya (yang sebenarnya BUKAN menggunakan EF), tetapi itu juga trik untuk saya. Saya menghapus EF dari referensi aplikasi konsol, pengembalian kesalahan, saya tidak mengerti - aplikasi konsol saya menggunakan proyek repositori (yang menggunakan EF) Terima kasih atas bantuannya!
Prokurors

33
Jangan lupa untuk menambahkan -ProjectName <ProjectName> ke baris perintah jika Anda memiliki beberapa proyek dalam solusi Anda ... !!!
Eugenio Miró

1
Menggunakan -Preopsi kirim nuget untuk menginstal paket pra-rilis. Saya tidak merekomendasikan menggunakannya. Saya memiliki kesalahan yang serupa tetapi solusinya hanya menginstal EntityFramework di proyek host. Saya telah menginstalnya di perpustakaan kelas tetapi tidak di proyek utama (web / konsol / atau apa pun),
Davide Icardi

10
Masalah yang sama disini. Saya memiliki proyek yang tidak memiliki referensi ke EF tetapi EF dll di folder Debug. Menjalankan perintah ini terhadap proyek ini ditambahkan EntityFramework.SqlServer.dllke folder Debug - masalah terpecahkan.
qujck

4
Dalam situasi saya kesalahan ini tidak muncul sampai saya menyebarkan proyek ke server pengujian kami. Memang EntityFramework.SqlServer.dll yang hilang dan menginstal EF melalui manajer paket berfungsi. Itu hanya menambahkan dua referensi yang relevan ke proyek dan kemudian menambahkan pengaturan entitasFramework ke web.config. Saya kira IIS lokal dapat sumber perakitan secara lokal tetapi IIS penuh pada server web tidak bisa karena izin?
Atters

384

Anda telah menambahkan EF ke proyek perpustakaan kelas. Anda juga perlu menambahkannya ke proyek yang mereferensikannya (aplikasi konsol Anda, situs web atau apa pun).


247
Ini jawaban yang benar-benar konyol. Mengapa saya harus melakukan itu? Dan tahukah Anda apa yang lebih konyol? Berhasil.
Robert

19
Lihat jawaban saya di bawah ini, Anda tidak perlu menginstal EF di aplikasi konsol Anda.
Francisco Goldenstein

7
Jawaban Anda benar. Hanya tambahkan referensi EntityFramework.SqlServer.dll ke proyek frontend yang menggunakan perpustakaan dengan EF, perbaiki masalah. Jadi jangan gunakan EF ini (hanya DLL)
harveyt

31
Anda tidak perlu menambahkan referensi ke EF di aplikasi konsol / web. Anda hanya perlu memastikan EntityFramework.SqlServer.dllsedang disalin ke direktori bin. Menambahkan referensi yang kuat dapat merusak arsitektur Anda (jika Anda membangun beberapa tingkatan, unit pelaksana tingkat atas Anda seharusnya tidak tahu tentang EF). Sebaliknya, Anda bisa memastikan penyedia SQL Server disalin. Lihat misalnya stackoverflow.com/a/19130718/870604
ken2k

3
Saya menduga alasan bahwa EntityFramework.SqlServer.dll tidak terdeteksi sebagai ketergantungan adalah karena Kerangka Entitas memuatnya secara dinamis. Bagaimana proyek Anda seharusnya tahu untuk menyalin melalui penyedia SQL ketika satu-satunya referensi untuk itu ada di file konfigurasi?
Joel McBeth

209

Anda tidak perlu menginstal Entity Framework di aplikasi Konsol Anda, Anda hanya perlu menambahkan referensi ke perakitan EntityFramework.SqlServer.dll. Anda bisa menyalin perakitan ini dari proyek perpustakaan kelas yang menggunakan Kerangka Entity ke folder LIB dan menambahkan referensi untuk itu.

Singkatnya:

  • Aplikasi Perpustakaan Kelas:
    • Instal Kerangka Entitas
    • Tulis kode lapisan data Anda
    • File app.config memiliki semua konfigurasi yang terkait dengan Entity Framework kecuali untuk string koneksi.
  • Buat aplikasi Konsol, web, atau desktop:
    • Tambahkan referensi ke proyek pertama.
    • Tambahkan referensi ke EntityFramework.SqlServer.dll.
    • app.config / web.config memiliki string koneksi (ingat bahwa nama entri konfigurasi harus sama dengan nama kelas DbContext.

Saya harap ini membantu.


18
Jawaban yang benar. TIDAK perlu menginstal EF. EntityFramework.SqlServer.dll.
Tom Stickel

15
Saya harus setuju. Ini benar-benar jawaban yang benar. Referensi dll yang berukuran 1/2 mb atau tarik proyek nuget EF yang> 5,5 mb. Mengurangi sedikit nilai arsitektur multi tingkatan juga. Pertunjukan yang buruk dari MS benar-benar: Saya memiliki 4 tingkatan dan tingkat teratas saya harus benar-benar tidak punya alasan untuk tahu apa-apa tentang EF
72GM

18
Tetap saja konyol. mis. Mengapa ujung depan memerlukan referensi ke SqlServer? Ujung depan tidak peduli, dalam kasus saya. Tapi itu berhasil. +1
Mike de Klerk

2
Ini sangat membantu. Terima kasih banyak.
peter_the_oak

1
Tidakkah ini menyulitkan untuk memperbarui versi EntityFramework? Anda harus ingat untuk pergi dan memperbarui referensi ke DLL
crush

114

Anda juga dapat melihat pesan ini jika Anda lupa untuk memasukkan "EntityFramework.SqlServer.dll".

Tampaknya itu adalah file yang baru ditambahkan di EF6. Awalnya saya tidak memasukkannya ke dalam modul gabungan dan mengalami masalah yang tercantum di sini.


7
Saya mengalami masalah ini ketika sebelumnya saya memiliki proyek (a) dengan referensi ke proyek (b) yang memiliki referensi ke EF. Setelah membersihkan & menghapus proyek (a) folder bin, kemudian membangun kembali, referensi EF menemukan, tetapi tidak EF.SqlServer.dll. Menyalin ini secara manual bekerja untuk saya
dan richards pada

2
@dan richardson terima kasih telah menyebutkan 'hapus folder bin'.
Rajshekar Reddy

Saya mendapatkan kesalahan ketika mencoba menjalankan skrip LINQPad setelah peningkatan EF6. Bahkan referensi EntityFramework.SqlServer.dll di LINQPad tidak memperbaikinya SAMPAI saya membangun kembali solusi saya di VS2013. Referensi baru kemudian diselesaikan dengan benar di LINQPad dan skrip saya berjalan!
Chris

Dalam kasus saya, saya baik-baik saja di lingkungan dev tetapi ketika saya menerbitkan muncul masalah yang dirujuk. Setelah membandingkan daftar perpustakaan di dev terhadap folder bin di server saya perhatikan tidak adanya EntityFramework.SqlServer.dll, saya hanya mengunggahnya dan menyegarkan aplikasi, dan voila itu diperbaiki.
Henry Rodriguez

Ini masalah bagi saya, terima kasih! Lihat solusi bersih oleh @Anders untuk menghindari masalah lupa menyertakan DLL dalam setiap proyek yang diperlukan.
SharpC

54

Alih-alih menambahkan EntityFramework.SqlServer ke proyek host Anda dapat memastikan referensi statis untuk itu dari proyek Model / entitas Anda seperti ini

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

Ini akan membuat proses pembangunan termasuk perakitan dengan proyek host.

Info lebih lanjut di blog saya http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/


5
Saya pikir ini adalah solusi bersih yang bagus di mana kita tidak harus menyertakan referensi untuk DLL terkait kegigihan dalam proyek yang harus agnostik persistensi.
JTech

3
Setuju, dan itu berlaku untuk perpustakaan mana pun dengan dependensi implisit bukan hanya kegigihan
Anders

3
Ketika Anda memiliki ketergantungan eksplisit pada jenis dalam perakitan, itu akan disalin oleh proses build. Namun di sini Anda tidak memiliki dependensi eksplisit, dan proses build akan gagal menyalin rakitan ke folder build. Kode saya pastikan ada referensi eksplisit untuk jenis apa pun di majelis tersebut.
Anders

2
Tanpanya, tidak ada ketergantungan eksplisit pada perakitan dari kode Anda dan tidak akan disalin ke output
Anders

2
Ini brilian.
Kris

48

Saat Anda menginstal Entity Framework 6 hingga Nuget. EntityFramework.SqlServer terkadang ketinggalan untuk dieksekusi lainnya. Cukup tambahkan Nugetpaket ke proyek itu.

Terkadang di atas tidak berfungsi untuk Proyek Uji

Untuk mengatasi masalah ini di Proyek Uji cukup tempatkan Metode ini di dalam Proyek Uji:

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

Metode ini tidak pernah dipanggil, tetapi sebagai pengamatan saya, kompiler akan menghapus semua majelis "yang tidak perlu" dan tanpa menggunakan EntityFramework.SqlServerbarang-barang tes gagal.


2
Yah ini tidak cantik tapi itu memperbaiki masalah yang saya alami di proyek pengujian saya. Tidak ada solusi lain yang berfungsi.
Yang Terhormat Chow

Dalam kasus saya itu sudah cukup untuk menambahkan Kerangka Entitas juga ke proyek pengujian saya di "Kelola paket Nuget untuk solusinya"
Juha Palomäki

sebenarnya Anda perlu dimasukkan ke dalam proyek apa pun (tidak hanya tes) untuk memastikan bahwa System.Data.Entity.SqlServer akan dimasukkan ke dalam "hasil lib set" setelah kompilasi (catatan: Persatuan atau alat IOC lainnya dapat mengubah aturan ini dan Anda akan perlu memanggil kode ini dari proyek uji).
Roman Pokrovskij

Ini sebenarnya solusi terbaik, karena Anda tidak perlu menyemprotkan referensi kerangka kerja di mana pun di proyek Anda.
Daniel Lobo

Ini mengarahkan saya ke arah yang benar. Itu EntityFramework.SqlServerditambahkan ke perpustakaan kelas Anda, tetapi jika tidak digunakan, itu tidak akan ditempatkan di dalam folder keluaran aplikasi Anda. Saya memperbaiki masalah dengan menambahkan ExecutionStrategy, yang masih perlu saya lakukan, jadi menambahkan baris seperti SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());di dalam DbConfigurationkelas memperbaiki masalah.
Jan_V

24

Tambahkan fungsi ini

private void FixEfProviderServicesProblem()

ke kelas konteks database di kelas perpustakaan dan DLL EntityFramework.SqlServer.dll yang hilang akan disalin ke tempat yang benar.

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

.


maaf mencoba mencabutnya ... karena saya tidak berpikir itu akan berhasil ... dan itu! ... ia mengatakan saya tidak dapat mengubah suara saya, kecuali jika jawabannya diedit, karena sudah terlalu lama dan sejak itu telah terkunci ...
Seabizkit

Ini juga berhasil bagi saya. Kami memiliki proyek perpustakaan yang menggunakan EF 6, dan aplikasi konsol yang menggunakan perpustakaan. Kami mendapatkan pengecualian yang sama dengan OP. Kami tidak ingin menempatkan konfigurasi khusus EntityFramework di file konfigurasi aplikasi, jadi metode ini bekerja untuk kami. Terima kasih
Rob

1
Di mana Anda menelepon FixEfProviderServicesProblemsaya mencoba di konstruktor, tanpa hasil.
Francis Ducharme

1
Saya tidak pernah menyebutnya - tidak harus. Fakta yang ada di sana membuat .net berpikir itu diperlukan dan memasukkan EntityFramwork sebagai ketergantungan.
Johannes

Mungkin dari stackoverflow.com/a/19130718/1467396 ? Tapi +1, bagaimanapun juga untuk kejelasan tentang bagaimana / di mana menggunakannya.
David

20

Tak satu pun dari ini bekerja untuk saya. Saya memang menemukan solusi dalam pertanyaan stackoverflow lain . Saya akan menambahkannya di sini untuk referensi mudah:

Anda perlu membuat referensi, sehingga akan disalin di jalur aplikasi ruang kerja. Karena nanti akan direferensikan dalam runtime. Jadi Anda tidak perlu menyalin file apa pun.

private volatile Type _dependency;

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

2
Ini! Tidak perlu menambahkan referensi ke proyek lain yang mungkin mereferensikan majelis ini.
tehDorf

8

Saya mendapat kesalahan yang sama saat menggunakan Entity Framework 6 dengan SQL Server Compact 4.0. Artikel tentang MSDN untuk Penyedia Kerangka Entitas untuk EF6 sangat membantu. Menjalankan perintah penyedia masing-masing sebagai paket nuget di Package Manager Console dapat menyelesaikan masalah, karena paket NuGet juga akan secara otomatis menambahkan pendaftaran ke file konfigurasi. Saya berlari PM> Install-Package EntityFramework.SqlServerCompactuntuk memecahkan masalah.


2
Saya benar-benar kagum tidak ada yang memilih untuk ini sejauh ini! Pesan kesalahan menyatakan dengan jelas: alasan kesalahan adalah bahwa setelah peningkatan EF, benar-benar tidak ada definisi penyedia yang tersisa untuk SQL Compact di file web.config aplikasi! Menambahkan paket yang Anda sebutkan memperbaiki file web.config, dan akan ada penyedia yang ditentukan.
Csaba Toth

1
hanya penyelamat hidup. Itu harus ditandai sebagai jawaban karena jelas memberikan solusi untuk masalah tersebut
ZafarYousafi

7

Mengalami masalah ini hari ini ketika bekerja dengan satu set layanan web, masing-masing dalam proyek yang berbeda, dan proyek terpisah yang berisi tes integrasi untuk beberapa layanan tersebut.

Saya telah menggunakan pengaturan ini selama beberapa waktu dengan EF5, tanpa perlu menyertakan referensi ke EF dari Proyek Uji Integrasi.

Sekarang, setelah meningkatkan ke EF6, sepertinya saya perlu memasukkan referensi ke EF6 dalam proyek uji integrasi juga, meskipun itu tidak digunakan di sana (cukup banyak seperti yang ditunjukkan di atas oleh user3004275 ).

Indikasi Anda menghadapi masalah yang sama:

  • Panggilan langsung ke EF (menghubungkan ke DB, mendapatkan data, dll) berfungsi dengan baik, asalkan mereka dimulai dari proyek yang memiliki referensi ke EF6.
  • Panggilan ke layanan melalui antarmuka layanan yang dipublikasikan berfungsi dengan baik; yaitu tidak ada referensi yang hilang "secara internal" dalam layanan.
  • Panggilan langsung ke metode publik dalam proyek layanan, dari proyek di luar layanan, akan menyebabkan kesalahan ini, meskipun EF tidak digunakan dalam proyek itu sendiri; hanya secara internal dalam proyek yang disebut

Poin ketiga adalah apa yang mengusir saya untuk sementara waktu, dan saya masih tidak yakin mengapa ini diperlukan. Menambahkan referensi ke EF6 dalam proyek Tes Integrasi saya menyelesaikannya dalam hal apa pun ...


7

Ketika kesalahan terjadi dalam proyek tes, solusi tercantik adalah menghias kelas tes dengan:

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

Memang cantik, tetapi menghasilkan lebih banyak pekerjaan dan lebih mudah untuk dilupakan. Dengan trik "referensi paksa", Anda hanya perlu melakukannya pada proyek yang benar-benar perlu menggunakan EF.
Charles Roberto Canato

7

Proyek startup yang mereferensikan proyek di mana Entity Framework sedang digunakan membutuhkan dua majelis berikut di folder bin itu:

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

Menambahkan a <section>ke <configSections>file .config pada proyek startup membuat perakitan pertama tersedia di direktori bin itu. Anda bisa menyalin ini dari file .config proyek Entity Framework Anda:

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

Untuk membuat .dll kedua tersedia di folder bin, meskipun tidak praktis, salinan manual dari folder bin dari proyek Entity Framework dapat dibuat. Alternatif yang lebih baik adalah dengan menambahkan proyek Post-Build Events dari Entity Framework pada baris berikut, yang akan mengotomatiskan proses:

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

2
Terima kasih, saya memiliki kerangka kerja Entitas dalam lapisan data sehingga terisolasi tetapi sangat disayangkan bahwa microsoft tidak akan memungkinkan kita untuk benar-benar mengisolasi lapisan data dan membuat kita mencemari ux dengan teknologi database. Saya berharap saya tidak perlu melakukan itu.
Matt

4

Saya baru saja mengalami masalah ini hari ini. Saya memiliki perpustakaan kelas repositori data dengan paket EF63 NuGet dan aplikasi konsol untuk pengujian, yang hanya merujuk pada proyek perpustakaan kelas. Saya membuat perintah post-build yang sangat sederhana, yang menyalin EntityFramework.SqlServer.dll dari folder Bin \ Debug perpustakaan kelas ke folder Bin \ Debug aplikasi konsol dan masalah diselesaikan. Jangan lupa untuk menambahkan bagian entityFramework ke file .config aplikasi konsol.


4

Tambahkan di bawah ini ke app.config Anda.

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

Anda juga perlu mendaftarkannya ke <configSections>-<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
TryingToImprove

Inilah yang dilakukan "IInstall-Package EntityFramework". Ini tidak benar-benar diperlukan karena EntityFramework secara default mencoba memuat EntityFramework.SqlServer.dll untuk nama invarian SqlClient. Metode ini dapat digunakan untuk menggantikan penyedia.
user1295211


3

Anda harus memaksakan referensi statis ke perakitan EntityFramework.SqlServer.dll , tetapi alih-alih meletakkan kode dummy, Anda bisa melakukan ini dengan cara yang lebih indah:

  1. Jika Anda sudah memiliki kelas DbConfiguration :

    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance);
        }
    }
  2. Jika Anda tidak memiliki kelas DbConfiguration, Anda harus meletakkan kode berikut di startup aplikasi (sebelum EF digunakan):

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

2

Saya baru saja menginstal ulang Kerangka Entitas menggunakan Nuget. Dan ikuti instruksi yang tertulis di tautan di bawah ini: http://robsneuron.blogspot.in/2013/11/entity-framework-upgrade-to-6.html

Saya pikir masalahnya akan terpecahkan.


Penjelasan akan menyenangkan! Mengapa Anda harus menginstal ulang dan sebagainya
Rizier123

1
Karena untuk beberapa alasan yang tidak diketahui perubahan tidak akan berpengaruh dan jadi saya menginstal ulang EntityFramework 6.1.1 dan setelah itu mulai berlaku.
Kuntal Ghosh

2

Rentangkan file YourModel.edmx dan buka kelas YourModel.Context.cs di bawah YourModel.Context.tt.

Saya menambahkan baris berikut di bagian menggunakan dan kesalahan diperbaiki untuk saya.

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

Anda mungkin harus menambahkan baris ini ke file setiap kali file dihasilkan secara otomatis.


2

Saya juga memiliki masalah yang sama. Masalah saya diselesaikan dengan melakukan hal berikut:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini


2

sepertinya tidak ada yang disebutkan pertama kali memeriksa apakah System.Data.SqlClient diinstal dalam sistem dan jika referensi dibuat untuk itu.

saya memecahkan masalah saya dengan menginstal System.Data.SqlClient dan menambahkan penyedia baru di app.Config

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

1

Pastikan juga Anda memulai proyek adalah proyek yang berisi dbcontext Anda (atau app.config yang relevan). Milik saya sedang mencoba untuk memulai proyek situs web yang tidak memiliki semua pengaturan konfigurasi yang diperlukan.


1

Saya mencoba hampir semua hal di atas dan tidak ada yang berhasil.

Hanya ketika saya mengatur DLL yang direferensikan di Proyek Default EntityFrameworkdan EntityFramework.SqlServerproperti Copy Localuntuk Truemulai bekerja!


1

semua orang yang saya butuhkan Perhatian Anda bahwa dua dll EntityFramework.dll Dan EntityFramework.SqlServer.dll adalah Pustaka lapisan DataAccess Dan tidak logis untuk menggunakannya dalam tampilan atau layer.it lain memecahkan masalah Anda tetapi tidak logis.

cara logis adalah atribut enitiess menghapus dan menggantinya dengan Fluent API. ini adalah solusi nyata


1

Saya punya satu aplikasi konsol dan perpustakaan kelas. Di perpustakaan kelas saya membuat Model Data Entitas (klik kanan ke Perpustakaan Kelas> Tambah> Item Baru> Data> ADO.NET Entity Data Model 6.0) dan meletakkan referensi di dalam aplikasi konsol. Jadi, Anda memiliki aplikasi konsol yang memiliki referensi ke perpustakaan kelas dan di dalam perpustakaan kelas Anda memiliki model EF. Saya memiliki kesalahan yang sama ketika saya mencoba untuk mendapatkan beberapa catatan dari tabel.

Saya mengatasi masalah ini dengan mengikuti langkah-langkah ini:

  1. Klik kanan untuk solusi dan pilih opsi 'Kelola Paket NuGet untuk Solusi' dan jendela manajer paket NuGet akan muncul.
  2. Buka opsi 'Kelola' di bawah TIP 'Paket yang diinstal': Kerangka Entity ditambahkan ke Perpustakaan Kelas, sehingga Anda akan memiliki EntityFramework di bawah 'Paket yang diinstal' dan Anda akan melihat 'Kelola'option
  3. Klik opsi 'Kelola' dan centang untuk menginstal paket ke proyek yang memiliki referensi ke perpustakaan kelas yang memiliki model EF (dalam kasus saya saya mengatur kotak centang untuk menginstal paket ke aplikasi konsol yang memiliki referensi ke perpustakaan kelas yang memiliki model EF di dalamnya)

Hanya itu yang harus saya lakukan dan semuanya bekerja dengan sempurna.

Saya harap ini membantu.


1

Saya mempunyai kesalahan yang sama. Sungguh aneh bahwa itu hanya terjadi setiap kali saya menggunakan dbContext saya untuk menanyakan model saya atau mendapatkan daftar seperti:

var results = _dbContext.MyModel.ToList();

Kami mencoba menginstal ulang Kerangka Entitas, referensi dengan benar tetapi tidak berhasil.

Untungnya, kami mencoba memeriksa ALLsolusi untuk Nuget , kemudian memperbarui semuanya atau memastikan everythingversi yang sama karena kami perhatikan bahwa kedua proyek memiliki versi EF yang berbeda di proyek Web. Dan itu berhasil. Kesalahan hilang.

Berikut adalah tangkapan layar tentang cara Mengelola Nuget untuk semua solusi:

masukkan deskripsi gambar di sini


1

Anda hanya kehilangan referensi ke EntityFramework.SqlServer.dll. Untuk proyek EntityFramework menggunakan SQL Server, dua file yang perlu Anda rujuk adalah EntityFramework.SqlServer.dll dan EntityFramework.dll


0

Saya memiliki masalah terkait ketika bermigrasi dari CE db ke Sql Server di Azure. Hanya membuang 4 jam mencoba menyelesaikan ini. Semoga ini bisa menyelamatkan seseorang nasib yang serupa. Bagi saya, saya punya referensi ke SqlCE di file paket.config saya. Menghapusnya memecahkan seluruh masalah saya dan memungkinkan saya menggunakan migrasi. Yay Microsoft untuk teknologi lain dengan masalah pengaturan dan konfigurasi yang tidak perlu.


0

Saya memiliki masalah yang sama, hanya menyalin file App Config dari proyek yang berisi DBContext ke proyek pengujian saya


0

Saya memiliki pengecualian yang sama. saya termasuk

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

dan semuanya kembali bekerja lagi ..


0

Sebagai pesan menunjukkan bahwa kita perlu menambahkan penyedia System.Data.SqlClient itu sebabnya kita perlu menginstal paket nuget dari EntityFramework yang memiliki dua dll tetapi jika kita mengembangkan hanya aplikasi konsol maka kita hanya perlu menambahkan referensi EntityFramework.SqlServer.dll

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.