Ngoại lệ EF 4.1 “Nhà cung cấp không trả về chuỗi ProviderManifestToken”


88

Tôi đang cố gắng sao chép một ví dụ được tìm thấy trên MSDN. Tôi đang sử dụng ASP.NET và EF 4.1 (CTP?). Tôi đã sử dụng NuGet để cài đặt gói EntityFramework.

Tôi gặp lỗi này: The provider did not return a ProviderManifestToken string... và cơ sở dữ liệu chưa bao giờ được tạo.

Đây là chuỗi kết nối của tôi:

<add name="HospitalContext"
   connectionString=
   "data source=.\SQLExpress;initial catalog=NewTestDB;integrated security=True;"
   providerName="System.Data.SqlClient"/>

Đây là mã của tôi:

var pat = new Patient { Name = "Shane123132524356436435234" };
db.Patients.Add(pat);

var labResult = new LabResult { Result = "bad", Patient = pat };

int recordAffected = db.SaveChanges();

Đây là bối cảnh của tôi:

public class HospitalContext : DbContext
{
    static HospitalContext()
    {
        Database.SetInitializer(new HostpitalContextInitializer());
    }

    public DbSet<Patient> Patients { get; set; }
    public DbSet<LabResult> LabResults { get; set; }
}

public class HostpitalContextInitializer :
             DropCreateDatabaseIfModelChanges<HospitalContext>
{
    protected override void Seed(HospitalContext context)
    {
        context.Patients.Add(new Patient { Name = "Fred Peters" });
        context.Patients.Add(new Patient { Name = "John Smith" });
        context.Patients.Add(new Patient { Name = "Karen Fredricks" });
    }
}

Đây là hệ thống SQL 2008 đã được vá đầy đủ, với VS 2010 SP1.


Có vẻ như sau khi thêm [Key] vào Mô hình, nó đã hoạt động qua vấn đề đó. Tôi vẫn gặp sự cố khác, nhưng điều này có thể đã giải quyết được điều đó.
bugnuker

Ngoài ra, nó có thể là tôi đã thêm "Kết hợp các security = true" vào chuỗi kết nối của tôi ...
bugnuker

Tôi đang gặp cùng một ngoại lệ khi làm việc vớiSqlServerCe.Entity.dll
Nano Taboada

2
Vì quan tâm đến những thứ có thể gợi lên ngoại lệ này - tôi dành 20 phút nhìn chằm chằm vào lỗi đánh máy trong tên của chuỗi kết nối phải khớp với tên của ngữ cảnh.
justSteve

Câu trả lời:


184

Tôi đã gặp lỗi này và đã thử một số đề xuất trước đó. Sau đó, tôi đã kiểm tra Ngoại lệ bên trong và nhận thấy rằng tôi đã gặp lỗi đăng nhập SQL đơn giản cho người dùng. Chỉ cần một cái gì đó khác để kiểm tra.


Trong trường hợp của tôi, mật khẩu máy chủ sql đã hết hạn
mklein

3
Cám ơn đã chỉ tôi hướng đi đúng. Dịch vụ SQL Express của tôi chưa được khởi động - duh!
camainc

Tốt ngoại lệ bên trong ol ... tôi đã sai tên DB của mình khi tôi trỏ EF đến một vị trí sao lưu mới ... điều buồn cười là tôi đã kiểm tra InnerEx và nhận xét của bạn khiến tôi quay lại và đọc lại nó ... kudos!
Andy Danger Gagne

Đang sử dụng Bảo mật tích hợp, IIS AppPool không có các quyền cần thiết.
Vincent Vancalbergh

+1 - (IP nhà tôi đã thay đổi) Lỗi Msg: Không thể mở máy chủ 'SERVERNAME' do đăng nhập yêu cầu. Ứng dụng khách có địa chỉ IP 'MY_OLD_IP' không được phép truy cập vào máy chủ. Để kích hoạt quyền truy cập, hãy sử dụng SQL Azure Portal hoặc chạy sp_set_firewall_rule trên cơ sở dữ liệu chính để tạo quy tắc tường lửa cho địa chỉ IP hoặc dải địa chỉ này. Có thể mất đến năm phút để thay đổi này có hiệu lực. \ R \ n Không đăng nhập được cho người dùng 'MYADMINACCT'. \ R \ n Phiên này đã được chỉ định ID theo dõi là 'GUID'. Cung cấp ID theo dõi này cho bộ phận hỗ trợ khách hàng khi bạn cần hỗ trợ. "}
Dylan Hayes

8

Điều này đôi khi có thể xảy ra khi bạn đặt chuỗi kết nối trong app.config của dự án sai trong Visual Studio.

Ví dụ: tôi gặp sự cố này trong dự án EF 4.1 (phiên bản đã phát hành) + dự án Dịch vụ dữ liệu WCF và tôi nhận thấy rằng tôi không có chuỗi kết nối được chỉ định trong Dự án dịch vụ dữ liệu, nơi nó đang được sử dụng.


Đây là giải pháp của tôi. Tôi đã phải đặt chuỗi kết nối thích hợp trong dự án khởi động.
MickJuice

5

Tôi đã gặp phải lỗi tương tự và thực sự là đăng nhập không thành công cho máy chủ được chỉ định. Tôi đã xóa thuộc tính "Bảo mật tích hợp" khỏi chuỗi kết nối cấu hình và nó đã hoạt động.


Điều này đã làm việc cho tôi. Bất kỳ ai khác gặp sự cố này nên thử điều này nếu các giải pháp khác không hoạt động.
Justin

Lỗi này xảy ra khi dịch vụ SQL Express bị tắt trên máy của tôi.
John M

4

Tôi đã gặp vấn đề tương tự và tôi thêm mã bên dưới ngay sau trường hợp ngữ cảnh của tôi (tải lên bằng exemple)

context.Database.Connection.ConnectionString = @"Data Source=.\SQLExpress;Initial Catalog=Test;Integrated Security=True";

4

Tôi đã gặp sự cố tương tự với ứng dụng MvcMusicStore. Tôi đã thay đổi một dòng trong Web.config từ "Instance = true" thành "Instance = false". Đôi khi nó hoạt động mà không có tinh chỉnh này nhưng tôi không biết điều gì gây ra sự khác biệt. Đọc http://msdn.microsoft.com/en-us/library/ms254504.aspx này không thực sự hữu ích.


Thật tuyệt vời ... đây là giải pháp thích hợp cho tôi. Tôi không biết tại sao.
Kees C. Bakker

2

Bởi một số lý do cho phép, EF không thể tạo kết nối cơ sở dữ liệu. Tôi đã phải đối mặt với cùng một vấn đề trong một ngày. Cuối cùng tôi đã thử giải pháp sau và nó hoạt động: a / Mở IIS (Tôi đang sử dụng IIS 7) b / Mở cài đặt nâng cao của appool mà trang web đang sử dụng (Ví dụ: DefaultAppPool) c / Nhìn vào nhóm Process Model, thay đổi giá trị Identity tới "Hệ thống địa phương"

Hy vọng nó làm việc với bạn.


2

Tôi chỉ gặp phải vấn đề tương tự ...
giải pháp phù hợp với tôi là:
chạy công cụ cấu hình mạng máy khách (gõ lệnh sáo rỗng trong Run)
và đảm bảo TCP / IP được bật ..


2

Cuối cùng tôi đã bẻ khóa nó - sau một cuộc rượt đuổi của một con ngỗng hoang vì nghĩ rằng đó là do sự cho phép.

Khải Huyền: SỬ DỤNG BỘ LỌC SQL

(Lưu ý: Gần đây tôi đã hạ cấp từ EF6 xuống EF5)

Sử dụng SQL Profiler, tôi nhanh chóng tìm thấy SQL cuối cùng được thực thi trước khi báo cáo lỗi:

SELECT TOP (1) 
[Project1].[C1] AS [C1], 
[Project1].[MigrationId] AS [MigrationId], 
[Project1].[Model] AS [Model]
FROM ( SELECT 
    [Extent1].[MigrationId] AS [MigrationId], 
    [Extent1].[Model] AS [Model], 
    1 AS [C1]
    FROM [dbo].[__MigrationHistory] AS [Extent1]
)  AS [Project1]
ORDER BY [Project1].[MigrationId] DESC

Hãy nhìn vào điều đó - điều gì đó liên quan đến việc di cư. Nó đang tìm kiếm trong __MigrationHistorybảng - mà tôi thậm chí còn không nhận ra nó đã tạo ra (tôi đã xóa Migrations trong CSPROJ của mình) và xóa nó.

Vì vậy, tôi kéo lên các hàng cho bảng đó và thấy rằng nó được gắn với một phiên bản sản phẩm cụ thể (v6).

nhập mô tả hình ảnh ở đây

Tôi thực sự đã hạ cấp từ EF6 (mà tôi không có ý định lắp đặt ngay từ đầu) xuống EF5 (tương thích hơn với giàn giáo) và đó là khi sự cố bắt đầu.

Tôi đoán là Model (<Binary data>)cột này không tương thích ngược - do đó The provider did not return a ProviderManifest instancelỗi vì nó không thể giải mã nó.

Tôi không có gì để mất và chỉ cần xóa sạch bảng này hoàn toàn và chạy Update-Database -Verbosevà sau đó quay trở lại và chạy.

Nếu bạn đang ở trong một môi trường tiên tiến hoặc đang trong quá trình sản xuất thì xóa bảng này có thể không phải là giải pháp, nhưng cách này cho phép tôi quay lại công việc ngay.


Cuối cùng tôi đã bỏ hoàn toàn bảng __MigrationsHistory và sắp xếp lại bằng Add-MigrationUpdate-Database -Verbose -Force. đây là một tài liệu tham khảo lệnh coding.abel.nu/2012/03/ef-migrations-command-reference
Simon_Weaver

điểm quan trọng là đây không phải là chỉ một lỗi cho phép
Simon_Weaver

1

Khi sử dụng Visual Studio 11 Beta với EF4.1 và ASP.NET MVC, tôi gần như bứt tóc cho đến khi tìm thấy

http://connect.microsoft.com/VisualStudio/feedback/details/740623/asp-net-mvc-4-default-connection-string-improperly-escaped

Để khắc phục sự cố của mình, tôi đã vào Application_Start và thay đổi

Database.DefaultConnectionFactory = new SqlConnectionFactory ("Nguồn dữ liệu = (localdb) \ v11.0; Bảo mật tích hợp = True; MultipleActiveResultSets = True");

đến

Database.DefaultConnectionFactory = new SqlConnectionFactory ( @ "Nguồn dữ liệu = (localdb) \ v11.0; Bảo mật tích hợp = True; MultipleActiveResultSets = True");


Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");đã được thêm vào Mainmehod của tôi , bây giờ nó hoạt động như một sự quyến rũ! Cảm ơn bạn rất nhiều.
rotgers

1

Lỗi này chỉ xuất hiện khi tệp .edmx đang mở và biến mất ngay sau khi tệp được đóng lại.

Trích dẫn này từ CodePlex , điều này đã làm việc với tôi (visual studio 2013 / MVC 5)


Làm việc với tôi quá. Đã thử đóng và mở lại tệp edmx. Đã làm việc.
Rohit,

1

Một điều khác cần xem xét nếu bạn đang sử dụng EF Code First là nó đôi khi không tự động tạo cơ sở dữ liệu sao lưu cho lớp DbContext của bạn. Giải pháp là thêm chuỗi kết nối của riêng bạn - bạn có thể sử dụng chuỗi kết nối có thể có để xử lý cơ sở dữ liệu người dùng / đăng ký hỗ trợ Nhà cung cấp Tư cách Thành viên Đơn giản, dưới dạng mẫu. Cuối cùng, bạn sẽ cần thêm một phương thức khởi tạo mặc định cho lớp DbContext mà bạn đã tạo:

public ChaletDb():base("ChaletConnection")
    {

    }

Ở đây, tên của chuỗi kết nối khi bạn nhập vào tệp web.config được sử dụng để hướng DbContext tạo cơ sở dữ liệu. Đôi khi, tôi phải tạo cơ sở dữ liệu theo cách thủ công (trong SQL Server Management Studio) để nhắc nó hoạt động.


0

Tôi có nhiều dự án trong một giải pháp và đã thêm EF vào từng dự án trong những thời điểm khác nhau. Trên một số máy, nó hoạt động và trên một số máy không thành công với lỗi đã nói ở trên. Tôi mất một lúc để nhận thấy rằng một số app.config trong dự án của tôi có điều này:

    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>

Điều này là ổn nếu bạn sử dụng LocalDb (mới "sql express"), nhưng hoàn toàn sai nếu bạn không cài đặt máy chủ cụ thể đó và sử dụng SQL thông thường.

Giải pháp: Loại bỏ đoạn mã trên.


0

Điều này là do kết nối với máy chủ SQL không thành công.

Đảm bảo rằng Tài khoản người dùng mà bạn đang chạy quy trình có quyền truy cập vào SQL Server.

Nếu bạn đã tạo DbContext từ luồng mẹ (như sử dụng tính năng Phụ thuộc Injection) và sau đó nếu bạn đang mạo danh người dùng khác thì lỗi này sẽ xảy ra. Giải pháp sẽ là tạo DbContext bên trong luồng mới hoặc ngữ cảnh Mạo danh mới.


0

Tôi vừa đóng tất cả các phiên bản của Visual Studio và mở lại giải pháp của mình.

Tôi không biết điều gì thực sự đã xảy ra, nhưng tôi đã có cùng một giải pháp được mở từ hai không gian làm việc cục bộ khác nhau (một với các thay đổi cục bộ của tôi, một với mã nguồn kho lưu trữ không thay đổi). Tôi làm việc với DB postgres, Entity Framework 6, Visual Studio 2013 và ASP.NET MVC 5.


0

Tôi đã gặp lỗi đối với khung thực thể, nhưng không có câu trả lời nào ở trên cuối cùng phù hợp với giải pháp cuối cùng đã hoạt động.

Mã EntityFramework Mô hình đầu tiên và DataContext của tôi nằm trong một dự án Riêng biệt với Dự án chính WebAPI của tôi. Dự án khung thực thể của tôi ở đâu đó dưới dòng mã hóa được đặt làm dự án khởi động và do đó khi tôi đang chạy di chuyển, tôi nhận được "Nhà cung cấp không trả lại chuỗi ProviderManifestToken" ... sự cố kết nối.

Hóa ra là vì Chuỗi kết nối đến DB nằm trong tệp Web.config trong dự án Chính WebAPI, nên khi tôi đang chạy di chuyển, chuỗi kết nối không được truy xuất. Bằng cách đặt dự án WebAPI làm startProject của tôi, tôi đã có thể kết nối thành công.

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.