Kata kunci tidak didukung: "sumber data" yang menginisialisasi Konteks Kerangka Entitas

161

Saya menginisialisasi konteks Objek Kerangka Entitas, dan ini memberi saya kata kunci yang tidak didukung kesalahan:

metadata=res://*/MainDB.csdl|res://*/MainDB.ssdl|res://*/MainDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Workspace\vs\Leftouch\Leftouch.Web\Data\Leftouch.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;App=EntityFramework"

Saya mengambil string koneksi langsung dari web.config yang berfungsi, dan hanya memodifikasi path ke file (yang saya atur secara dinamis), dan alih-alih menggunakan nilai default, menggunakan string koneksi ini secara eksplisit. Apa yang bisa menyebabkan kesalahan ini?

Dapat Poyrazoğlu
sumber
2
Silakan merujuk stackoverflow.com/questions/6003085/… untuk pendekatan yang berbeda
LCJ
1
Saya tidak tahu siapa yang membuat ini metadata=res:, kemudian res=somethingelsedengan "sintaksis di mana-mana - tetapi mereka harusnya senang mereka tidak berada di ruangan yang sama dengan saya sekarang: - /
Simon_Weaver
2018. Kesalahan bersih EF Core serupa sintaks - providerName tidak diperlukan oleh string koneksi SqlClient. Juga tidak ada tanda kutip atau centang pada string untuk inti EF.
Sql Surfer

Jawaban:

321

Alasan sebenarnya Anda mendapatkan kesalahan ini adalah karena "nilai - nilai dalam string koneksi Anda.

Jika Anda mengganti mereka dengan tanda kutip tunggal maka itu akan berfungsi dengan baik.

https://docs.microsoft.com/archive/blogs/rickandy/explicit-connection-string-for-ef

(Diposting agar orang lain bisa mendapatkan perbaikan lebih cepat daripada saya.)

Gunung berapi
sumber
1
Jika Anda meneruskan string koneksi ke kelas ObjectContent, pastikan ia memiliki tanda kutip tunggal. Jika Anda mendapatkan koneksi dari file .config, maka boleh saja menggunakan & quot; urutan pelarian.
Mike Stonis
Inilah yang diperbaiki untuk saya.
GiddyUpHorsey
Bagi Anda yang tidak terbiasa dengan cara kerja XML, "adalah urutan melarikan diri untuk tanda kutip karena itu adalah karakter khusus dalam XML.
Sungai Vivian
1
Terima kasih sudah bekerja sekarang
Shivam Srivastava
System.Data.EntityClient.EntityConnectionStringBuilder membuatnya untuk saya, terima kasih.
AFract
37

Saya memperbaikinya dengan mengubah EntityClientkembali ke SqlClient, meskipun saya menggunakan Entity Framework.

Jadi string koneksi lengkap saya dalam format:

<add name="DefaultConnection" connectionString="Data Source=localhost;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient" />
Kejam
sumber
2
Bekerja untukku! +1
Yury Kerbitskov
6
Perubahan di atas berpotensi menyebabkan (seperti dalam kasus saya) kesalahan berikut "Konteksnya sedang digunakan dalam mode Code First dengan kode yang dihasilkan dari file EDMX untuk pengembangan Database First atau Model First"
Psi-Ed
Anda dapat berkomentar melempar UnintentionalCodeFirstException () baru di OnModelCreating (), tetapi sepertinya solusi kotor
Alexander Ulmaskulov
14

Ini tampaknya hilang providerName="System.Data.EntityClient"sedikit. Anda yakin semuanya?

Craig Stuntz
sumber
Ok, itu atribut lain, lupa yang itu. Menambahkannya sekarang metadata=res://*/MainDB.csdl|res://*/MainDB.ssdl|res://*/MainDB.msl;provider=System.Data.SqlClient;provider name=System.Data.EntityClient;provider connection string=&quot;{0};App=EntityFramework&quot;dan sekarang kata kunci tidak ditemukan: nama penyedia. Saya juga sudah mencoba providerName=...bukannya provider name=, tetapi tidak berhasil.
Can Poyrazoğlu
2
Yah, saya mulai membuatnya menggunakan EntityConnectionStringBuilderkelas, dan anehnya, ini berfungsi sekarang. Tapi saya masih tidak tahu mengapa itu tidak menerima string saya, bahkan dengan tambahan Anda.
Can Poyrazoğlu
3

Percaya atau tidak, mengganti nama LinqPad.exe.config menjadi LinqPad.config menyelesaikan masalah ini.

Sameer Alibhai
sumber
12
Ini Microsoft, apa pun bisa terjadi!
Altaf Patel
Ini tidak masuk akal. Apa yang harus dilakukan Linqpad dengan pertanyaan dan bagaimana mengubah nama suatu executable bisa membantu?
Gert Arnold
Nah kesalahan khusus ini terjadi dengan Linqpad dalam kasus saya dan melakukan ini diselesaikan. Dan saya tidak mengganti nama executable. Saya mengganti nama .exe.config menjadi .config.
Sameer Alibhai
Bagaimanapun, ini adalah skenario yang sangat spesifik. Itu hanya menambah kebisingan karena tidak menjelaskan apa-apa,
Gert Arnold
1

Cukup gunakan \ "sebagai gantinya", itu harus menyelesaikan masalah.

Nilesh Moradiya
sumber
1

Pastikan Anda memiliki Data Sourcedan tidak DataSourcedalam string koneksi Anda. Ruang itu penting. Percayalah kepadaku. Saya seorang idiot.

Hairgami_Master
sumber