Pengecualian EF 4.1 "Penyedia tidak mengembalikan string ProviderManifestToken"

88

Saya mencoba mereplikasi contoh yang ditemukan di MSDN. Saya menggunakan ASP.NET dan EF 4.1 (CTP?). Saya telah menggunakan NuGet untuk menginstal paket EntityFramework.

Saya mendapatkan kesalahan ini: The provider did not return a ProviderManifestToken string... dan database tidak pernah dibuat.

Ini string koneksi saya:

<add name="HospitalContext"
   connectionString=
   "data source=.\SQLExpress;initial catalog=NewTestDB;integrated security=True;"
   providerName="System.Data.SqlClient"/>

Ini kode saya:

var pat = new Patient { Name = "Shane123132524356436435234" };
db.Patients.Add(pat);

var labResult = new LabResult { Result = "bad", Patient = pat };

int recordAffected = db.SaveChanges();

Inilah konteks saya:

public class HospitalContext : DbContext
{
    static HospitalContext()
    {
        Database.SetInitializer(new HostpitalContextInitializer());
    }

    public DbSet<Patient> Patients { get; set; }
    public DbSet<LabResult> LabResults { get; set; }
}

public class HostpitalContextInitializer :
             DropCreateDatabaseIfModelChanges<HospitalContext>
{
    protected override void Seed(HospitalContext context)
    {
        context.Patients.Add(new Patient { Name = "Fred Peters" });
        context.Patients.Add(new Patient { Name = "John Smith" });
        context.Patients.Add(new Patient { Name = "Karen Fredricks" });
    }
}

Ini adalah sistem SQL 2008 yang sepenuhnya ditambal, dengan VS 2010 SP1.

bugnuker
sumber
Tampaknya setelah menambahkan [Kunci] ke Model, ini berfungsi melewati masalah itu. Saya masih mengalami masalah lain, tetapi ini mungkin dapat menyelesaikannya.
bugnuker
Juga, mungkin saya menambahkan "Keamanan
terintegrasi
Saya mengalami pengecualian yang sama saat bekerja denganSqlServerCe.Entity.dll
Nano Taboada
2
Untuk kepentingan hal-hal yang dapat menimbulkan pengecualian ini - saya menghabiskan 20 menit menatap melewati kesalahan ketik dalam nama string koneksi yang harus sesuai dengan nama konteksnya.
justSteve

Jawaban:

184

Saya mendapatkan kesalahan ini dan mencoba beberapa saran sebelumnya. Kemudian saya memeriksa Inner Exception dan menyadari bahwa saya mengalami kegagalan login SQL sederhana untuk pengguna. Hanya sesuatu yang lain untuk diperiksa.

junken
sumber
Dalam kasus saya, kata sandi server sql telah kedaluwarsa
mklein
3
Terima kasih telah mengarahkan saya ke arah yang benar. Layanan SQL Express saya belum dimulai - ya!
camainc
Pengecualian batin yang bagus ... nama DB saya salah ketika saya mengarahkan EF ke lokasi cadangan baru ... lucunya, saya memeriksa InnerEx dan komentar Anda membuat saya kembali dan membacanya ulang ... pujian!
Andy Danger Gagne
Menggunakan Keamanan Terintegrasi, IIS AppPool tidak memiliki hak yang diperlukan.
Vincent Vancalbergh
+1 - (IP rumah saya berubah) Pesan Kesalahan: Tidak dapat membuka server 'SERVERNAME' yang diminta oleh login. Klien dengan alamat IP 'MY_OLD_IP' tidak diizinkan untuk mengakses server. Untuk mengaktifkan akses, gunakan SQL Azure Portal atau jalankan sp_set_firewall_rule di database master untuk membuat aturan firewall untuk alamat IP atau rentang alamat ini. Mungkin diperlukan waktu hingga lima menit untuk menerapkan perubahan ini. \ R \ nLogin gagal untuk pengguna 'MYADMINACCT'. \ R \ nSesi ini telah diberi ID penelusuran 'GUID'. Berikan ID pelacakan ini ke dukungan pelanggan saat Anda membutuhkan bantuan. "}
Dylan Hayes
8

Ini kadang-kadang dapat terjadi ketika Anda menempatkan string koneksi dalam app.config dari proyek yang salah di Visual Studio.

Misalnya, saya mendapat masalah ini di proyek EF 4.1 (versi rilis) + proyek Layanan Data WCF dan saya perhatikan bahwa saya tidak memiliki string koneksi yang ditentukan dalam Proyek Layanan Data, tempat string itu digunakan.

Preet Sangha
sumber
Ini adalah solusi saya. Saya harus meletakkan string koneksi yang tepat di proyek startup.
MickJuice
5

Saya mengalami kesalahan yang sama, dan sebenarnya itu gagal masuk untuk server yang ditentukan. Saya menghapus atribut "Keamanan Terpadu" dari string koneksi konfigurasi dan berhasil.

Rakesh Singh
sumber
Ini berhasil untuk saya. Orang lain yang mengalami masalah ini harus mencoba ini jika solusi lain tidak berfungsi.
Justin
Kesalahan ini terjadi saat layanan SQL Express dimatikan di komputer saya.
John M
4

Saya memiliki masalah yang sama, dan saya menambahkan kode di bawah ini tepat setelah contoh konteks saya (onload by exemple)

context.Database.Connection.ConnectionString = @"Data Source=.\SQLExpress;Initial Catalog=Test;Integrated Security=True";
toto123
sumber
4

Saya mengalami masalah serupa dengan aplikasi MvcMusicStore. Saya mengubah baris di Web.config dari "Instance = true" menjadi "Instance = false". Terkadang berfungsi tanpa tweak ini tetapi saya tidak tahu apa yang menyebabkan perbedaannya. Membaca http://msdn.microsoft.com/en-us/library/ms254504.aspx ini tidak terlalu membantu.

xuvion
sumber
Luar biasa ... ini adalah solusi yang tepat untuk saya. Saya tidak tahu kenapa.
Kees C. Bakker
2

Dengan alasan izin tertentu, EF tidak dapat membuat koneksi database. Saya menghadapi masalah yang sama sepanjang hari. Akhirnya saya mencoba solusi berikut dan berhasil: a / Open IIS (Saya menggunakan IIS 7) b / Buka pengaturan lanjutan appool yang digunakan situs web (Ex: DefaultAppPool) c / Lihat grup Model Proses, ubah nilai Identitas ke "Sistem Lokal"

Semoga berhasil dengan Anda.

Telvin Nguyen
sumber
2

Saya baru saja mengalami masalah yang sama ...
solusi yang berhasil untuk saya adalah:
jalankan alat konfigurasi jaringan klien (ketik cliconfg di Run)
dan pastikan TCP / IP diaktifkan ..

pengguna1168945
sumber
2

Saya akhirnya berhasil memecahkannya - setelah sedikit kejar-kejaran karena mengira itu karena izin.

Wahyu: GUNAKAN SQL PROFILER

(Catatan: Saya baru-baru ini menurunkan versi dari EF6 ke EF5)

Menggunakan SQL Profiler, saya dengan cepat menemukan SQL terakhir yang dieksekusi sebelum kegagalan yang dilaporkan:

SELECT TOP (1) 
[Project1].[C1] AS [C1], 
[Project1].[MigrationId] AS [MigrationId], 
[Project1].[Model] AS [Model]
FROM ( SELECT 
    [Extent1].[MigrationId] AS [MigrationId], 
    [Extent1].[Model] AS [Model], 
    1 AS [C1]
    FROM [dbo].[__MigrationHistory] AS [Extent1]
)  AS [Project1]
ORDER BY [Project1].[MigrationId] DESC

Lihat itu - ada hubungannya dengan migrasi. Ini mencari di __MigrationHistorytabel - yang saya bahkan tidak menyadarinya telah dibuat (saya sudah menghapus Migrasi di CSPROJ saya) dan membersihkannya.

Jadi saya menarik baris untuk tabel itu dan melihat bahwa itu terkait dengan versi produk tertentu (v6).

masukkan deskripsi gambar di sini

Saya benar-benar menurunkan versi dari EF6 (yang awalnya tidak ingin saya instal) ke EF5 (yang lebih kompatibel dengan scaffolding) dan saat masalah dimulai.

Dugaan saya adalah bahwa Model (<Binary data>)kolom tersebut tidak kompatibel ke belakang - maka The provider did not return a ProviderManifest instancekesalahan karena tidak dapat memecahkan kode itu.

Saya tidak akan rugi apa-apa dan hanya menghapus tabel ini sepenuhnya dan lari Update-Database -Verbose lalu kembali aktif dan berjalan.

Jika Anda berada di lingkungan tingkat lanjut atau sudah berproduksi, menghapus tabel ini mungkin bukan solusinya, tetapi cara ini memungkinkan saya untuk segera kembali bekerja.

Simon_Weaver
sumber
Saya akhirnya menjatuhkan tabel __MigrationsHistory sepenuhnya dan mencadangkan ulang dengan Add-Migrationdan Update-Database -Verbose -Force. inilah referensi perintah coding.abel.nu/2012/03/ef-migrations-command-reference
Simon_Weaver
poin pentingnya adalah ini bukan hanya kesalahan izin
Simon_Weaver
1

Dalam menggunakan Visual Studio 11 Beta dengan EF4.1 dan ASP.NET MVC, saya hampir mencabut rambut sampai saya menemukannya

http://connect.microsoft.com/VisualStudio/feedback/details/740623/asp-net-mvc-4-default-connection-string-improperly-escaped

Untuk memperbaiki masalah saya, saya masuk ke Application_Start dan berubah

Database.DefaultConnectionFactory = new SqlConnectionFactory ("Sumber Data = (localdb) \ v11.0; Keamanan Terintegrasi = Benar; MultipleActiveResultSets = True");

untuk

Database.DefaultConnectionFactory = new SqlConnectionFactory ( @ "Sumber Data = (localdb) \ v11.0; Keamanan Terintegrasi = Benar; MultipleActiveResultSets = True");

GaTechThomas
sumber
Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");telah ditambahkan ke Mainmehod saya , sekarang berfungsi seperti jimat! Terima kasih banyak.
rotgers
1

Kesalahan ini hanya ada saat file .edmx terbuka dan menghilang segera setelah file ditutup kembali.

Kutipan dari CodePlex ini, ini berhasil dengan saya (visual studio 2013 / MVC 5)

Feras
sumber
Bekerja dengan saya juga. Mencoba menutup dan membuka kembali file edmx. Bekerja.
Rohit
1

Satu hal lain yang perlu dipertimbangkan jika Anda menggunakan EF Code First adalah terkadang tidak secara otomatis membuat database cadangan ke kelas DbContext Anda. Solusinya adalah menambahkan string koneksi Anda sendiri - Anda dapat menggunakan string koneksi yang mungkin ada untuk menangani database pengguna / registrasi yang mendukung Penyedia Keanggotaan Sederhana, sebagai template. Terakhir, Anda perlu menambahkan konstruktor default untuk kelas DbContext yang Anda buat:

public ChaletDb():base("ChaletConnection")
    {

    }

Di sini, nama string koneksi saat Anda memasukkan file web.config Anda digunakan untuk mengarahkan DbContext untuk membuat database. Sangat sering, saya harus membuat database secara manual (di SQL Server Management Studio) yang mendorongnya untuk berfungsi.

John Kelleher
sumber
0

Saya memiliki banyak proyek dalam satu solusi dan menambahkan EF ke setiap proyek dalam waktu yang berbeda. Pada beberapa mesin itu berfungsi dan pada beberapa gagal dengan kesalahan yang disebutkan di atas. Butuh beberapa saat bagi saya untuk memperhatikan bahwa beberapa app.config proyek saya memiliki ini:

    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>

Ini tidak masalah jika Anda menggunakan LocalDb (seperti "sql express" baru), tetapi sepenuhnya salah jika Anda tidak menginstal server tertentu dan menggunakan SQL biasa.

Solusi: Hapus kode di atas.

Oleg K
sumber
0

Ini karena koneksi ke server SQL gagal.

Pastikan Akun Pengguna yang Anda gunakan untuk menjalankan proses memiliki akses ke SQL Server.

Jika Anda telah menghasilkan DbContext dari utas induk (seperti menggunakan Injeksi ketergantungan) dan kemudian jika Anda meniru pengguna lain maka kesalahan ini akan terjadi. Solusinya adalah membuat DbContext di dalam utas baru atau konteks Peniruan Identitas baru.

justcoding121
sumber
0

Saya baru saja menutup semua contoh Visual Studio dan membuka kembali solusi saya.

Saya tidak tahu apa yang sebenarnya terjadi, tetapi saya memiliki solusi yang sama yang dibuka dari dua ruang kerja lokal yang berbeda (satu dengan perubahan lokal saya, satu dengan kode sumber repositori yang tidak berubah). Saya bekerja dengan postgres DB, Entity Framework 6, Visual Studio 2013 dan ASP.NET MVC 5.

Bung Pascalou
sumber
0

Saya mengalami kesalahan untuk kerangka entitas, tetapi tidak satu pun dari jawaban di atas yang akhirnya sesuai dengan solusi yang akhirnya berhasil.

Model Pertama Kode Kerangka Kerja Entity dan DataContext saya berada dalam proyek Terpisah dari Proyek Utama WebAPI saya. Proyek Kerangka Kerja Entitas saya di suatu tempat di garis pengkodean ditetapkan sebagai proyek permulaan dan oleh karena itu ketika saya menjalankan migrasi, saya mendapatkan "Penyedia tidak mengembalikan string ProviderManifestToken" ... masalah sambungan.

Ternyata karena ConnectionString ke DB terletak di file Web.config di proyek utama WebAPI, saat saya menjalankan migrasi, string koneksi tidak diambil. Dengan menyetel proyek WebAPI sebagai startProject saya, saya berhasil tersambung.

Ninja Tanpa Tidur
sumber