Từ khóa không được hỗ trợ: Nguồn dữ liệu của Wikipedia Khởi tạo bối cảnh Entity Framework


161

Tôi đang khởi tạo bối cảnh Đối tượng khung thực thể và điều này mang lại cho tôi từ khóa không được hỗ trợ lỗi:

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"

Tôi đã lấy chuỗi kết nối trực tiếp từ web.config đang hoạt động và chỉ sửa đổi đường dẫn đến tệp (mà tôi đặt tự động) và thay vì sử dụng giá trị mặc định, đã sử dụng chuỗi kết nối này một cách rõ ràng. Điều gì có thể gây ra lỗi này?


2
Vui lòng tham khảo stackoverflow.com/questions/6003085/ cấp cho cách tiếp cận khác
LCJ

1
Tôi không biết ai đã nghĩ ra điều này metadata=res:, sau đó res=somethingelsevới "cú pháp khắp nơi - nhưng họ nên thực sự vui mừng vì họ không ở cùng phòng với tôi ngay bây giờ: - /
Simon_Weaver

2018 .Net EF Core lỗi cú pháp tương tự - CarrierName không cần thiết bởi chuỗi kết nối SqlClient. Cũng không có dấu ngoặc kép hoặc dấu tích trong chuỗi cho lõi EF.
Sql Surfer

Câu trả lời:


321

Lý do thực sự khiến bạn gặp phải lỗi này là do các "giá trị trong chuỗi kết nối của bạn.

Nếu bạn thay thế những người có dấu ngoặc đơn thì nó sẽ hoạt động tốt.

https://docs.microsoft.com/archive/bloss/rickandy/explicit-connection-opes-for-ef

(Đăng để người khác có thể sửa lỗi nhanh hơn tôi đã làm.)


1
Nếu bạn chuyển chuỗi kết nối đến lớp ObjectContent, hãy đảm bảo rằng nó có dấu ngoặc đơn. Nếu bạn nhận được kết nối từ tệp .config, thì bạn có thể sử dụng & quot; trình tự thoát.
Mike Stonis

Đây là những gì cố định nó cho tôi.
GiddyUpHorsey

Đối với những người bạn không quen với cách XML hoạt động, "là một chuỗi thoát cho dấu ngoặc kép vì đó là một ký tự dành riêng trong XML.
Sông Vivian

1
Cảm ơn nó đã hoạt động ngay bây giờ
Shivam Srivastava

System.Data.EntityClient.EntityConnectionStringBuilder đã làm điều đó cho tôi, cảm ơn bạn.
Thu hút

37

Tôi đã sửa lỗi này bằng cách thay đổi EntityClienttrở lại SqlClient, mặc dù tôi đang sử dụng Entity Framework.

Vì vậy, chuỗi kết nối hoàn chỉnh của tôi là ở định dạng:

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

2
Đã làm cho tôi! +1
Yury Kerbitskov

6
Thay đổi ở trên có khả năng dẫn đến (như trong trường hợp của tôi) lỗi sau "Bối cảnh đang được sử dụng trong chế độ Code First với mã được tạo từ tệp EDMX cho phát triển Cơ sở dữ liệu đầu tiên hoặc Mô hình đầu tiên"
Psi-Ed

Bạn có thể nhận xét ném UnintentalalCodeFirstException () mới vào OnModelCreating (), nhưng có vẻ như một cách giải quyết bẩn thỉu
Alexander Ulmaskulov

14

Điều này dường như là thiếu providerName="System.Data.EntityClient"bit. Chắc chắn bạn có toàn bộ?


Ok, đó là một thuộc tính khác, quên cái đó. Đã thêm nó bây giờ 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;và bây giờ nó nói không tìm thấy khóa: tên nhà cung cấp. Tôi cũng đã thử providerName=...thay vì provider name=quá, nhưng không có may mắn.
Có thể Poyrazolu

2
Chà, tôi bắt đầu tạo nó bằng cách sử dụng EntityConnectionStringBuilderlớp, và thật kỳ lạ, giờ nó đã hoạt động. Nhưng tôi vẫn không biết tại sao nó không chấp nhận chuỗi của tôi, ngay cả với các bổ sung của bạn.
Có thể Poyrazoğlu

3

Tin hay không, đổi tên LinqPad.exe.config thành LinqPad.config đã giải quyết vấn đề này.


12
Đây là Microsoft, bất cứ điều gì cũng có thể xảy ra!
Altaf Patel

Điều này không có ý nghĩa. Linqpad có liên quan gì đến câu hỏi và làm thế nào để đổi tên một tệp thực thi có thể hữu ích?
Gert Arnold

Vâng, lỗi đặc biệt này xảy ra với Linqpad trong trường hợp của tôi và làm điều này đã giải quyết nó. Và tôi đã không đổi tên thực thi. Tôi đã đổi tên .exe.config thành .config.
Sameer Alibhai

Dù sao, đó là một kịch bản rất cụ thể. Nó chỉ thêm tiếng ồn vì nó không giải thích được gì,
Gert Arnold


1

Hãy chắc chắn rằng bạn có Data Sourcevà không có DataSourcetrong chuỗi kết nối của bạn. Không gian là quan trọng. Tin tôi đi Tôi là một thằng ngốc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.