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?


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


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

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?


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.


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

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

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.