từ khóa không được hỗ trợ nguồn dữ liệu


82

Tôi có một ứng dụng asp.net-mvc với cơ sở dữ liệu thành viên mặc định. Tôi đang truy cập nó bằng ADO.NET Entity Framework.

Bây giờ tôi muốn chuyển nó sang IIS, nhưng một số vấn đề xuất hiện. Tôi phải cài đặt SQL Server Management Studio, Tạo DB mới, nhập vào đó tất cả dữ liệu từ tệp .MDF trước đó. Điều duy nhất còn lại phải làm (theo tôi biết) là thay đổi thành chuỗi kết nối. Tuy nhiên, tôi không thực sự có kinh nghiệm với điều này và tiếp tục nhận được Từ khóa không được hỗ trợ: 'nguồn dữ liệu'. ngoại lệ. Đây là chuỗi kết nối của tôi:

<add name="ASPNETDBEntities" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.EntityClient" />

Bất kỳ ý tưởng, có gì sai?


Tôi đã gặp lỗi này khi chọn sai dự án khởi động nên VS không thể tìm thấy chuỗi kết nối của tôi. Đảm bảo một dự án khởi động với app.config được chọn.
wnbates

Câu trả lời:


145

Những gì bạn có là một chuỗi kết nối ADO.NET hợp lệ - nhưng nó KHÔNG PHẢI là một chuỗi kết nối Entity Framework hợp lệ.

Chuỗi kết nối EF sẽ trông giống như sau:

<connectionStrings> 
  <add name="NorthwindEntities" connectionString=
     "metadata=.\Northwind.csdl|.\Northwind.ssdl|.\Northwind.msl;
      provider=System.Data.SqlClient;
      provider connection string=&quot;Data Source=SERVER\SQL2000;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=False&quot;" 
      providerName="System.Data.EntityClient" /> 
</connectionStrings>

Bạn đang thiếu tất cả các phần tử metadata=providerName=trong chuỗi kết nối EF của mình ...... về cơ bản bạn chỉ có những gì chứa trong provider connection stringphần.

Sử dụng trình thiết kế EDMX sẽ tạo chuỗi kết nối EF hợp lệ cho bạn, trong web.config hoặc app.config của bạn.

Marc

CẬP NHẬT: OK, tôi hiểu bạn đang cố gắng làm gì: bạn cần chuỗi kết nối "ADO.NET" thứ hai chỉ dành cho cơ sở dữ liệu thành viên / người dùng ASP.NET. Chuỗi của bạn ổn, nhưng tên cung cấp bị sai - nó sẽ phải là "System.Data.SqlClient" - kết nối này không sử dụng ENtity Framework - sau đó không chỉ định "EntityClient" cho nó!

<add name="ASPNETMembership" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.SqlClient" />

Nếu bạn chỉ định chuỗi kết nối providerName=System.Data.EntityClient==> Entity Framework (với siêu dữ liệu = và mọi thứ).

Nếu bạn cần và chỉ định providerName=System.Data.SqlClient==> chuỗi kết nối ADO.NET SQL Server thẳng mà không có tất cả các bổ sung EF


Trên thực tế, nó đã làm, nhưng sau đó tôi nhận được ngoại lệ Không thể mở tệp vật lý "C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf". Lỗi hệ điều hành 5: "5 (không thể truy xuất văn bản cho lỗi này. Lý do: 15105)". Cố gắng đính kèm cơ sở dữ liệu được đặt tên tự động cho tệp C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf không thành công. Cơ sở dữ liệu có cùng tên tồn tại hoặc tệp được chỉ định không thể mở được hoặc nằm trên chia sẻ UNC. Từ một số nguồn, tôi nghĩ, điều này là sai .. Dù sao cũng cảm ơn.
Trimack 10/09/09

Tôi không chắc mình hiểu sự cố chuỗi kết nối thứ hai. Tôi nên để ở đó cái do nhà thiết kế tạo và thêm ASPNETMembership mà bạn đã viết cho tôi?
Trimack 10/09/09

Nếu bạn có các thực thể của mình trong trình thiết kế EDMX - chúng cần được truy cập bằng "EntityClient" và chuỗi kết nối EF. Nếu bạn sử dụng hệ thống thành viên ASP.NET "có sẵn", nó KHÔNG PHẢI là một phần của mô hình EF của bạn, vì vậy khi bạn tạo chuỗi kết nối cho cơ sở dữ liệu thành viên ASP.NET của mình, bạn không thể sử dụng "EntityClient" làm nhà cung cấp - sử dụng SqlClient.
marc_s 10/09/09

Vì vậy, có - bạn cần cả hai - chuỗi kết nối EF mà hệ thống EDMX của bạn đã tạo cho bạn, CỘNG một chuỗi thứ hai - chuỗi kết nối ADO.NET bình thường - cho hệ thống thành viên ASP.NET.
marc_s 10/09/09

1
Vừa cho bạn lượt ủng hộ thứ 100 cho bài đăng của bạn. Giáng sinh vui vẻ :)
RBT

7

Sự cố này có thể xảy ra khi bạn tham chiếu chuỗi kết nối web.config (hoặc app.config) của mình theo chỉ mục ...

var con = ConfigurationManager.ConnectionStrings[0].ConnectionString;

Chuỗi kết nối dựa trên 0 không phải lúc nào cũng là chuỗi trong tệp cấu hình của bạn vì nó kế thừa những chuỗi khác theo mặc định từ xa hơn trong ngăn xếp .

Các phương pháp được đề xuất là truy cập kết nối của bạn bằng tên ...

var con = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;

hoặc để xóa phần tử connnectionStrings trong tệp cấu hình của bạn trước ...

<connectionStrings>
    <clear/>
    <add name="MyConnection" connectionString="...

2

Tôi đã nhận được cùng một vấn đề.
nhưng mã này hoạt động tốt, hãy thử nó.

<add name="MyCon" connectionString="Server=****;initial catalog=PortalDb;user id=**;password=**;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />

0

Tôi đã gặp sự cố này khi bắt đầu sử dụng Entity Framework, sự cố xảy ra khi tôi không thay đổi kết nối máy chủ SQL cũ thành kết nối EntityFrameWork.

Giải pháp: trong tệp nơi kết nối được thực hiện thông qua tệp web.config "add name =" Entities "connectionString = XYZ", hãy đảm bảo rằng bạn đang đề cập đến kết nối chính xác, trong trường hợp của tôi, tôi phải làm điều này

        public static string MyEntityFrameworkConnection
    {
        get
        {
             return ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
        }

    }

gọi MyEntityFrameworkConnection bất cứ khi nào cần thiết lập kết nối.

private string strConnection= Library.DataAccessLayer.DBfile.AdoSomething.MyEntityFrameworkConnection;

lưu ý: kết nối trong tệp web.config sẽ được tạo tự động khi thêm mô hình Thực thể vào giải pháp.


0

Tôi biết đây là một bài đăng cũ nhưng gần đây tôi cũng gặp phải lỗi tương tự nên đối với những gì đáng có, đây là một giải pháp khác:

Đây thường là lỗi chuỗi kết nối, vui lòng kiểm tra định dạng của chuỗi kết nối của bạn, bạn có thể tra cứu 'chuỗi kết nối khung thực thể' hoặc làm theo các đề xuất ở trên.

Tuy nhiên, trong trường hợp của tôi, chuỗi kết nối của tôi vẫn ổn và lỗi do một cái gì đó hoàn toàn khác gây ra, vì vậy tôi hy vọng điều này sẽ giúp ai đó:

  1. Đầu tiên, tôi gặp lỗi EDMX : có một bảng cơ sở dữ liệu mới trong EDMX và bảng đó không tồn tại trong cơ sở dữ liệu của tôi (điều buồn cười là lỗi này không rõ ràng lắm vì nó không được hiển thị trong EDMX hoặc cửa sổ xuất của tôi, thay vào đó nó đã được giấu trong studio trực quan trong cửa sổ 'Danh sách lỗi' bên dưới 'Cảnh báo'). Tôi đã giải quyết lỗi này bằng cách thêm bảng bị thiếu vào cơ sở dữ liệu của mình. Tuy nhiên, tôi thực sự đang bận cố gắng thêm một quy trình được lưu trữ và vẫn gặp lỗi 'nguồn dữ liệu', vì vậy hãy xem bên dưới cách tôi đã giải quyết nó như thế nào:

  2. Lỗi thủ tục đã lưu trữ : Tôi đang cố gắng thêm một thủ tục đã lưu trữ và mỗi khi tôi thêm nó qua cửa sổ thiết kế EDMX, tôi lại gặp lỗi 'nguồn dữ liệu'. Giải pháp là thêm thủ tục được lưu trữ làm trống (tôi giữ tên và khai báo proc đã lưu trữ nhưng đã xóa nội dung của proc đã lưu trữ và thay thế nó bằng 'select 1' và thử thêm nó vào EDMX). Nó đã làm việc! Có lẽ EF không thích thứ gì đó bên trong proc được lưu trữ của tôi. Khi tôi đã thêm proc vào EF, sau đó tôi có thể cập nhật nội dung của proc trên cơ sở dữ liệu của mình theo những gì tôi muốn và nó hoạt động, lỗi 'nguồn dữ liệu' đã được giải quyết.

sự kì lạ


0

Tôi gặp lỗi tương tự, sau đó cập nhật chuỗi kết nối của mình như bên dưới,

<add name="EmployeeContext" connectionString="data source=*****;initial catalog=EmployeeDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

Hãy thử nó sẽ giải quyết được vấn đề của bạn.

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.