2009-09-10 3 views
58

Tôi có ứ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.nguồn dữ liệu không được hỗ trợ từ khóa

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 tất cả dữ liệu từ tệp .MDF trước đó. Chỉ có điều còn lại để làm (như xa tôi biết) là để thay đổi 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" /> 

Mọi ý tưởng, có gì sai?

Trả lời

110

Những gì bạn có là chuỗi kết nối ADO.NET hợp lệ - nhưng đó là NOT chuỗi kết nối khung thực thể hợp lệ.

Chuỗi kết nối EF sẽ giống như thế này:

<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 metadata=providerName= yếu tố trong chuỗi kết nối EF của bạn ...... bạn về cơ bản chỉ có những gì chứa đựng trong provider connection string một phần.

Sử dụng trình thiết kế EDMX nên 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

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

<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 providerName=System.Data.EntityClient ==>Entity Framework chuỗi kết nối (với siêu dữ liệu = và tất cả mọi thứ).

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

+0

Như một vấn đề của thực tế, nó đã làm, nhưng sau đó tôi nhận được ngoại lệ Không thể mở tập tin 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.Một cơ sở dữ liệu có cùng tên tồn tại hoặc không thể mở tệp được chỉ định hoặc nó nằm trên chia sẻ UNC. Từ một số nguồn, tôi nghĩ, điều này là sai .. Cảm ơn anyway. – Trimack

+0

Tôi không chắc tôi hiểu vấn đề chuỗi kết nối thứ hai. Tôi nên để cho có một tạo ra bởi nhà thiết kế và thêm ASPNETMembership bạn đã viết cho tôi? – Trimack

+0

Nếu bạn có các thực thể của mình trong nhà thiết kế EDMX - chúng cần được truy cập bằng phương tiện của một "EntityClient" và một chuỗi kết nối EF. Nếu bạn sử dụng hệ thống thành viên ASP.NET "out-of-the-box", nó ** KHÔNG ** một phần của mô hình EF của bạn, vì vậy khi bạn tạo một 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à nhà cung cấp - sử dụng SqlClient. –

4

Vấn đề này có thể xảy ra khi bạn tham khảo web.config của bạn (hoặc app.config) kết nối chuỗi theo chỉ mục ...

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

Chuỗi kết nối không dựa trên không phải lúc nào cũng là một trong tệp cấu hình của bạn là inherits others by default from further up the stack.

Các phương pháp được đề nghị là để truy cập kết nối của bạn theo tên ...

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

hoặc để xóa các yếu tố connnectionStrings trong tập tin cấu hình của bạn đầu tiên ...

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

Tôi có vấn đề này khi Tôi bắt đầu sử dụng Entity Framework, nó 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 tin nơi kết nối được thực hiện thông qua file web.config "add name =" Entities "connectionString = XYZ", chắc chắn rằng bạn đang đề cập đến kết nối đúng, 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 MyEntityFrameworkKết nối bất cứ khi nào kết nối cần được thiết lập.

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.

2

Tôi cũng gặp vấn đề tương tự.
nhưng mã này hoạt động tốt để thử nó.

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

Tôi biết đây là một bài cũ nhưng tôi đã cùng một lỗi thời gian gần đây để cho những gì nó có giá trị, đây là một giải pháp:

Đây thường là một lỗi chuỗi kết nối, hãy kiểm tra định dạng của bạn chuỗi kết nối, bạn có thể tra cứu 'chuỗi khung kết nối 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 là do một cái gì đó hoàn toàn khác nhau vì vậy tôi hy vọng điều này sẽ giúp người:

  1. Trước tiên tôi đã có một 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 không rõ ràng vì nó không được hiển thị trong cửa sổ EDMX hoặc đầu ra của tôi, thay vào đó nó được giấu trong phòng thu trực quan trong ' Lỗi Danh sách 'cửa sổ 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 tôi. Nhưng, tôi đã thực sự bận rộn cố gắng thêm một thủ tục được lưu trữ và vẫn nhận được lỗi 'nguồn dữ liệu' để xem bên dưới cách tôi giải quyết nó:

  2. Lỗi quy trình được lưu trữ: Tôi đang cố gắng thêm quy trình được lưu trữ và mọi lúc thêm nó qua cửa sổ thiết kế EDMX, tôi nhận được lỗi 'nguồn dữ liệu'. Giải pháp là thêm thủ tục được lưu trữ dưới dạng trống (tôi giữ tên proc và khai báo đã 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. Một khi tôi đã thêm proc vào EF, 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 thành những gì tôi muốn và nó hoạt động, lỗi 'datasource' được giải quyết.

weirdness

0

tôi đã nhận được báo lỗi tương tự, sau đó cập nhật chuỗi kết nối của tôi như dưới đây,

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

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