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

Fernando Vellozo
sumber
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
douglaslps
sumber
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).

Clément Picou
sumber
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.

Francisco Goldenstein
sumber
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.

Mike
sumber
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/

Anders
sumber
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.

Umar Abbas
sumber
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;
        }
    }
}

.

Johannes
sumber
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);
}
Carra
sumber
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.

Mayara
sumber
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 ...

Kjartan
sumber
7

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

[DeploymentItem("EntityFramework.SqlServer.dll")]
Alberto Juan
sumber
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\
Leonel B.
sumber
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.

Ondřej
sumber
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>
Taran
sumber
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

Menghapus Folder BIN berhasil untuk saya

David
sumber
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);
    }
Rosberg Linhares
sumber
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.

Kuntal Ghosh
sumber
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.

pengguna2347528
sumber
2

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

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

BehrouzMoslem
sumber
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"/>
Tobi Owolawi
sumber
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.

pengguna2588362
sumber
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!

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

Vahid Akbari
sumber
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.

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

Willy David Jr
sumber
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

pengguna2956314
sumber
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.

pengguna2662643
sumber
0

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

stephen ebichondo
sumber
0

Saya memiliki pengecualian yang sama. saya termasuk

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

dan semuanya kembali bekerja lagi ..

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

Sandeep Shekhawat
sumber