ไม่สนับสนุนคำหลัก: "แหล่งข้อมูล" การเริ่มต้นบริบทของ Entity Framework


161

ฉันกำลังเริ่มต้นบริบทวัตถุ Entity Framework และทำให้ฉันมีคำหลักที่ไม่สนับสนุนข้อผิดพลาด:

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"

ฉันใช้สตริงการเชื่อมต่อโดยตรงจาก web.config ซึ่งใช้งานได้และแก้ไขเฉพาะเส้นทางไปยังไฟล์ (ซึ่งฉันตั้งค่าแบบไดนามิก) และแทนที่จะใช้ค่าเริ่มต้นให้ใช้สตริงการเชื่อมต่อนี้อย่างชัดเจน สิ่งที่อาจทำให้เกิดข้อผิดพลาดนี้?


2
โปรดดูstackoverflow.com/questions/6003085/…สำหรับแนวทางอื่น
LCJ

1
ฉันไม่ทราบว่าใครมากับสิ่งนี้metadata=res:แล้วres=somethingelseกับ"ทั่วสถานที่ - แต่พวกเขาควรจะดีใจจริง ๆ ที่พวกเขาไม่ได้อยู่ในห้องเดียวกับฉันในขณะนี้: - /
Simon_Weaver

2018. สุทธิข้อผิดพลาดทางไวยากรณ์ที่คล้ายกันของ EF Core - ไม่จำเป็นต้องมี providerName โดยสตริงการเชื่อมต่อ SqlClient นอกจากนี้ยังไม่มีเครื่องหมายคำพูดหรือการขีดในแกนของ EF
นักท่องอินเทอร์เน็ต Sq

คำตอบ:


322

เหตุผลที่แท้จริงที่คุณได้รับข้อผิดพลาดนี้เป็นเพราะ"ค่าในสตริงการเชื่อมต่อของคุณ

หากคุณแทนที่คำพูดเหล่านั้นด้วยคำพูดเดียวมันจะทำงานได้ดี

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

(โพสต์เพื่อให้ผู้อื่นสามารถแก้ไขได้เร็วกว่าที่ฉันทำ)


1
หากคุณกำลังส่งผ่านสตริงการเชื่อมต่อไปยังคลาส ObjectContent ตรวจสอบให้แน่ใจว่ามันมีเครื่องหมายคำพูดเดี่ยว หากคุณได้รับการเชื่อมต่อจากไฟล์. config ก็เป็นเรื่องปกติที่จะใช้ปุ่ม & quot; ลำดับหนี
Mike Stonis

นี่คือสิ่งที่แก้ไขให้ฉัน
GiddyUpHorsey

สำหรับผู้ที่คุณไม่คุ้นเคยกับวิธีการทำงานของ XML "เป็นลำดับการหลีกเลี่ยงสำหรับเครื่องหมายคำพูดเพราะเป็นอักขระที่สงวนไว้ใน XML
Vivian River

1
ขอบคุณที่ทำงานตอนนี้
Shivam Srivastava

System.Data.EntityClient.EntityConnectionStringBuilder ทำให้ฉันขอบคุณ
หยุด

37

ฉันแก้ไขได้โดยเปลี่ยนEntityClientกลับเป็นSqlClientแม้ว่าฉันจะใช้ Entity Framework

ดังนั้นสตริงการเชื่อมต่อที่สมบูรณ์ของฉันอยู่ในรูปแบบ:

<add name="DefaultConnection" connectionString="Data Source=localhost;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient" />

2
ทำงานให้ฉัน! +1
Yury Kerbitskov

6
การเปลี่ยนแปลงข้างต้นอาจนำไปสู่ ​​(เช่นในกรณีของฉัน) ข้อผิดพลาดต่อไปนี้ "บริบทถูกใช้ในโหมดรหัสแรกด้วยรหัสที่สร้างจากไฟล์ EDMX สำหรับฐานข้อมูลแรกหรือการพัฒนาแบบจำลองแรก"
Psi-Ed

คุณสามารถแสดงความคิดเห็นโยน UnintentionalCodeFirstException ใหม่ () ใน OnModelCreating () แต่ดูเหมือนว่าวิธีแก้ไขปัญหาสกปรก
Alexander Ulmaskulov

14

ดูเหมือนว่าจะหายไปproviderName="System.Data.EntityClient"เล็กน้อย แน่ใจว่าคุณได้รับสิ่งทั้งหมดหรือไม่


ตกลงนั่นคือคุณสมบัติอื่นลืมสิ่งนั้น เพิ่มตอนนี้มันเป็น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;และตอนนี้มันบอกว่าไม่พบกุญแจ: ชื่อผู้ให้บริการ ฉันพยายามproviderName=...แทนprovider name=ด้วยเหมือนกัน แต่ก็ไม่มีโชค
Can Poyrazoğlu

2
ฉันเริ่มสร้างมันโดยใช้EntityConnectionStringBuilderคลาสและแปลก ๆ ตอนนี้มันใช้งานได้แล้ว แต่ฉันก็ยังไม่รู้ว่าทำไมมันถึงไม่ยอมรับสตริงของฉันแม้จะมีการเพิ่มของคุณ
สามารถPoyrazoğlu

3

เชื่อหรือไม่ว่าการเปลี่ยนชื่อ LinqPad.exe.config เป็น LinqPad.config แก้ปัญหานี้ได้


12
นี่คือ Microsoft สิ่งที่สามารถเกิดขึ้นได้!
Altaf Patel

มันไม่สมเหตุสมผล Linqpad ทำอะไรกับคำถามและวิธีการเปลี่ยนชื่อไฟล์ปฏิบัติการที่เคยมีประโยชน์?
Gert Arnold

ดีข้อผิดพลาดนี้เกิดขึ้นกับ Linqpad ในกรณีของฉันและการทำเช่นนี้แก้ไขได้ และฉันไม่ได้เปลี่ยนชื่อปฏิบัติการ ฉันเปลี่ยนชื่อ. exe.config เป็น. config
Sameer Alibhai

อย่างไรก็ตามมันเป็นสถานการณ์ที่เฉพาะเจาะจงมาก มันเพิ่มเสียงดังโดยไม่อธิบายอะไรเลย
Gert Arnold


1

ตรวจสอบให้แน่ใจว่าคุณมีData Sourceและไม่DataSourceอยู่ในสตริงการเชื่อมต่อของคุณ พื้นที่มีความสำคัญ เชื่อฉัน. ฉันเป็นคนงี่เง่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.