2013-03-04 3 views
7

Tôi đang cố gắng thiết lập một ứng dụng web ASP.NET MVC 4 đơn giản bằng cách sử dụng di chuyển đầu tiên của DB từ SQL Server (2005). Tôi đã tạo ra các bảng trong cơ sở dữ liệu và đã sử dụng Entity Framework để tạo các đối tượng trong mã. Tôi có thể truy cập dữ liệu bằng cách sử dụng các đối tượng này.Không thể tìm thấy Nhà cung cấp Dữ liệu Khung được yêu cầu. (SqlClient)

Sự cố xảy ra khi tôi cố gắng khởi tạo WebSecurity bằng cách sử dụng WebSecurity.InitializeDatabaseConnection("FLMREntities", "UserProfile", "UserId", "UserName", true); trong tệp Global.asax.cs. Tôi đã thử sử dụng bộ lọc InitializeSimpleMembershipAttribute đi kèm với mẫu và có cùng một vấn đề. Tôi nhận được thông báo lỗi:

Unable to find the requested .Net Framework Data Provider. It may not be installed. 

Đây là chuỗi kết nối có liên quan:

<add name="FLMREntities" 
    connectionString="metadata=res://*/Models.FLMR.csdl|res://*/Models.FLMR.ssdl|res://*/Models.FLMR.msl; 
        provider=System.Data.SqlClient; 
        provider connection string=&quot;data source=notes.marietta.edu; 
         initial catalog=muskwater; 
         user id=muskwater;password=********; 
         MultipleActiveResultSets=True; 
         App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 

Ngoài ra, tôi đã tạo ra các bảng thành viên trong cơ sở dữ liệu để phù hợp với những gì các mẫu tạo. Nếu tôi thay đổi tham số cuối cùng trong Initialize call thành false (để nó không tự động tạo các bảng) thì nó trả về rằng nó không thể tìm thấy bảng UserProfile. Tôi cũng đã thử các biến thể về tên, chẳng hạn như [dbo]. [UserProfile].

Tất cả những gì tôi cần là có một mô hình tài khoản đơn giản để cho phép người dùng đăng nhập và cho phép một số người dùng nhất định xem thêm nội dung.

+0

Bạn có '' trước chuỗi kết nối? Để ngăn bạn kế thừa bất kỳ cấu hình nào từ các cấu hình khác – Basic

+0

Tôi không có chuỗi kết nối nào khác trong dự án này. Tôi đã nhận xét một từ mẫu. Tôi vẫn cần '' và điều đó có đi cùng cấp độ giống như ở trên không? – amoscardino

+0

Có thể cấu hình máy/toàn trang để thêm chuỗi kết nối vào ứng dụng của bạn. Một số khuôn khổ cũng vậy. '' phải là phần tử đầu tiên trong cùng một phần với chuỗi kết nối của bạn (thứ tự được giữ nguyên khi các phần cấu hình được tải). – Basic

Trả lời

1

Đây có thể là bản sao của this.

Từ những gì tôi nhớ về vấn đề này, bạn cần đảm bảo rằng nhà cung cấp sqldata được đăng ký. Đôi khi, trong machine.config của bạn có một mục trùng lặp mà bạn cần phải xóa và nếu tôi nhớ chính xác, có thể có một mục nhập sai lầm mà bạn cần phải loại bỏ. Hãy xem this msdn post, thông tin cho điều này là khoảng một nửa xuống trang.

Liên kết đến SO khác có một số liên kết có thể hữu ích. Nếu điều này kết thúc không được đánh dấu là một câu hỏi trùng lặp, tôi có thể thêm chúng ở đây là tốt hoặc bất cứ điều gì là thích hợp để làm.

Phần bạn đang tìm kiếm sẽ trông giống như này tôi nghĩ:

<system.data> 
    <DbProviderFactories> 
    <add name="SqlClient Data Provider" 
    invariant="System.Data.SqlClient" 
    description=".Net Framework Data Provider for SqlServer" 
    type="System.Data.SqlClient.SqlClientFactory, System.Data, 
    Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
    /> 
    </DbProviderFactories> 
</system.data> 

Từ thông tin mà bạn đã cung cấp trong ý kiến, có vẻ như điều này là mất tích trong Machine.config của bạn. Trừ khi tôi bị nhầm lẫn (có thể) có nghĩa là Nhà cung cấp SQL không được đăng ký trên máy của bạn. Bạn sẽ cần phải thêm phần trên vào web.config của bạn. Bạn cũng sẽ cần phải chắc chắn rằng System.Data.SqlClient được tham chiếu trong dự án của bạn.

Nếu điều này không được cài đặt trên máy mục tiêu của bạn, bạn sẽ có nhiều việc phải làm hơn, cài đặt nó. Tôi muốn tôi có thể giúp bạn với điều đó nhiều hơn, nhưng khi tôi đã làm điều này, nó đã được cho SqlServerCE, vì vậy các tập tin tôi sử dụng là rất khác nhau.

Chúc may mắn!

EDIT: Thông tin quan trọng, là phiên bản cần khớp với tệp bạn đang sử dụng. trong loại = "blabh..blah..blah..Version = 2.0.0.0, blah blah" cần phải là phiên bản của tệp bạn đang sử dụng, hãy nhấp chuột phải vào tệp của bạn và tải xuống phiên bản tệp. Nếu không thành công, hãy thử các biến thể của phiên bản. Tôi tin rằng tập tin của tôi là 2.0.0.1 nhưng phiên bản = 2.0 là những gì làm việc khi tôi đã làm nó. Chỉ cần thử một vài phiên bản khác nhau dựa trên số phiên bản của bạn (ví dụ: 2.0, 2.0.0, 2.0.0.1).

+0

Câu trả lời trong câu hỏi đó thực sự không giải thích cách khắc phục sự cố. Tôi đã đặt file machine.config và chỉ có các mục DbProviderFactory cho SqlServerCe. Tôi có cần phải thêm một mục cho SqlClient? Nó sẽ chỉ trông giống như một trong những bạn đăng? – amoscardino

+0

Tôi sẽ không sửa đổi máy.config trừ khi bạn biết bạn đang làm gì. Hãy để tôi xem liệu tôi có thể tìm thấy tài nguyên mà tôi đã sử dụng khi tôi gặp vấn đề này để bạn có ý tưởng hay hơn không. –

+0

Ngoài ra, FYI, khi tôi đã có lỗi chính xác tương tự như bạn (nó đã ở thời gian chạy), đây là giải pháp. Tôi đã phải chắc chắn để triển khai các tập tin chính xác và tôi đã phải thêm phần tôi đã liệt kê vào web.config của tôi. –

0

Chỉ muốn kêu vang ở đây, rằng tôi đã gặp phải vấn đề này, bằng cách nhìn vào machine.config của tôi cho phiên bản .NET được nhắm mục tiêu mà tôi đang chạy ...trong cấu trúc:

đảm bảo rằng các nhà cung cấp dữ liệu mục tiêu của bạn được nhập một cách chính xác trong phạm vi đó, chỉ có một mỗi nhà cung cấp (Tôi đã thấy bản sao gây ra vấn đề), cũng như đảm bảo rằng nó là XML hợp lệ, và bạn chỉ có một mục nhập DBProviderFactories. Trong trường hợp của tôi, tôi đã có một mục nhập sau khi nhập cảnh ban đầu (về cơ bản là hai mục, một với các nhà cung cấp của tôi, một trống), và trống đã được gây ra tất cả các vấn đề.

Hy vọng điều này sẽ giúp người với cùng một vấn đề :)

4

Tôi đã có một vấn đề tương tự, những gì tôi đã thực hiện: tôi sửa đổi kết nối mặc định. Tôi đã có chuỗi kết nối cho mô hình edmx, trông giống như sau:

<add name="ChemicalReporterEntities" connectionString="metadata=res://*/ChemicalDB.csdl|res://*/ChemicalDB.ssdl|res://*/ChemicalDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLExpress;initial catalog=ChemicalReporter;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

Nhưng tôi không thể sử dụng nó với nhà cung cấp SimpleMemebrship. Vì vậy, trong Visual Studio Tôi mở cửa sổ Server Explorer> Dữ liệu Connections, tôi chọn kết nối của tôi, nhấp chuột phải, tài sản và tôi đã sao chép chuỗi kết nối từ đó và dán nó vào defaultConnection:

<add name="DefaultConnection" connectionString="Data Source=.\SQLExpress;Initial Catalog=ChemicalReporter;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework" providerName="System.Data.SqlClient" /> 

Sau đó tôi đã thay đổi WebSecurity.InitializeDatabaseConnection để sử dụng DefaultConnection.

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", true);