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'
untukSystem.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.Entity
dalam 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
sumber
private volatile Type _dependency...
jawabannya dan berhasil! Hanya saja saya harus menambahkan kelas terpisah seperti ini hanya untuk membuat EF bekerja di TeamCity.Jawaban:
Masalah yang sama, tetapi saya menginstal EF 6 melalui Nuget. EntityFramework.SqlServer tidak ada untuk dieksekusi. Saya hanya menambahkan paket nuget ke proyek itu.
sumber
x.ToString()
atau itu akan mengeluarkantypeof
s di Rilis.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:
Solusi saya: Saya menempatkan metode ini di dalam proyek pengujian saya:
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 .
sumber
DbContext
kelas 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.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.
sumber
Solusi saya adalah menghapus kerangka entitas dari proyek melalui manajer nuget dan menambahkannya kembali.
sumber
PM> Update-Package -Reinstall "EntityFramework" -ProjectName "MyProj1"
Saya memecahkan ini dengan menambahkan stament menggunakan di atas kelas DBContext saya, seperti:
sumber
Saya telah menggunakan registrasi berbasis kode untuk provider. link1 link2
Baru saja membuat kelas konfigurasi seperti
Poin kuncinya adalah ini. SetProviderServices (SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
dan menggunakannya sedemikian rupa
sumber
DbContextConfiguration
? Terima kasihGet-Project MyWinformsProject | Install-Package EntityFramework
yang memperbaikinya untuk saya. Saya masih ingin lebih memahami alasannya.DbConfiguration.Loaded += (sender, e) => e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);
.Saya mengatasinya dengan [DeploymentItem] pada kelas inisialisasi perakitan saya
sumber
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.
sumber
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.
sumber
Saya telah memecahkan masalah ini dengan menyalin
EntityFramework.SqlServer.dll
file secara manual kebin folder
aplikasi utama.sumber
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.
sumber
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;
sumber
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.
sumber
Cukup referensi atau peramban dll EF - EntityFramework.SqlServer.dll
sumber
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.
sumber
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 { }
sumber
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:
sumber
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.
sumber
Setelah mencoba semua solusi yang disarankan dan tidak membuat proyek saya berfungsi, saya akhirnya menemukan sedikit komentar di halaman ini :
Dan itu berhasil juga untuk saya.
sumber
Menambahkan Entityframework.dll dan Entityframework.sqlserver.dll ke proyek referensi menyelesaikan masalah.
sumber
Saya memeriksa jendela Debug Output di proyek Unit Test. EntityFramework.SqlServer.dll tidak dimuat. Setelah menambahkannya ke folder bin tes berhasil dijalankan.
sumber
Saya juga punya masalah serupa
Masalah saya terpecahkan dengan melakukan hal berikut:
sumber
Saya memiliki masalah yang sama dengan
DBContext
objek Instantiating dari proyek unit test. Saya memeriksa paket proyek pengujian unit saya dan saya pikirEntityFramework
paket itu tidak diinstal, saya menginstalnya dari Nuget dan masalah terpecahkan (saya pikir itu bug EF).selamat coding
sumber
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
sumber
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
sumber
Ada perbaikan yang mudah. buka referensi di proyek Anda, klik kanan "System.Data" -> properti. Ubah "Salin Lokal" ke "Benar".
Masalah harus diperbaiki.
sumber
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.
sumber
hapus kerangka entitas dari proyek melalui nuget lalu tambahkan kembali.
sumber
Dalam kasus saya
dll
tidak disalin meskipun saya menambahkan referensi. Ini karenaEntityFramework.SqlServer.dll
tidak disalin ke proyek Anda. Tambahkan dll itu dan semoga akan bekerja. Anda dapat menemukannya dari proyek tempat Anda menambahkan model data.sumber
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.
sumber