2017-09-04 24 views
11

Tôi có ứng dụng ASP.Net Core sử dụng EF Core.Lỗi liên tục với EF Core: Kết nối không hỗ trợ MultipleActiveResultSets

Tôi sử dụng ASP.Net Identity và chia sẻ cùng một DBContext cho các thực thể của ứng dụng của tôi.

Tôi đã đặt chuỗi kết nối của mình thành cơ sở dữ liệu Azure SQL để có MultipleActiveResultSet = True.

Nó hoạt động cho một hoặc hai ngày, nhưng cuối cùng nó không thành công với các lỗi:

The connection does not support MultipleActiveResultSets.

Tôi không nghĩ MARS là vấn đề thực sự vì nó làm việc cho hai ngày đầu tiên nó đã được lên.

Tôi đang sử dụng DI tích hợp của ASP.Net Core để đặt DbContext của tôi.

services.AddDbContext<AppDbContext>(options => 
    options.UseSqlServer(appDbContextConnectionString)); 

Hiểu biết của tôi là thời gian mặc định cho DbContext ở trên là Tạm thời (theo yêu cầu web).

Có ổn không khi chia sẻ cùng DBContext với ASP.Net Identity hoặc tôi có một tài khoản riêng cho các thực thể của ứng dụng, được chỉ cho cùng một DB không?

Tôi không biết đây có phải là vấn đề với EF Core, ASP.Net Core hoặc với cấu hình SQL Azure hay không.

+0

https://github.com/aspnet/EntityFrameworkCore/issues/6491 Ý của anh ấy là gì: "Phần mềm trung gian có phạm vi cho mỗi yêu cầu không?" –

+0

bạn có thể chia sẻ mã nơi bạn tiêm hoặc tạo ngữ cảnh db của mình không? – hugoterelle

+3

Bạn có thể muốn kiểm tra xem chuỗi kết nối của bạn với "MultipleActiveResultSet = True" có thực sự được sử dụng trong thời gian chạy hay không. Chỉ cần đoán thôi. https://stackoverflow.com/questions/12690453/sql-azure-getting-an-error-there-is-already-an-open-datareader-associated-wit –

Trả lời

0

Tôi cũng tiếp tục gặp sự cố này và đặt MultipleActiveResultSet=True trong chuỗi kết nối không làm được gì nhiều.

cấu hình db của tôi trong Startup.cs rất giống với những gì bạn có:

services.AddEntityFrameworkSqlServer() 
     .AddDbContext<MyDbContext>(options => 
      options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), 
      builder => builder.MigrationsAssembly("MyProject")), 
      ServiceLifetime.Transient 
     ); 

Hóa ra là tôi đã nhận được

The connection does not support MultipleActiveResultSets

bởi vì tôi đã có một vài thắc mắc db async truy cập vào các đối tượng tương tự. Vì vậy, một truy vấn db sẽ truy xuất một thực thể và một truy vấn thứ hai sẽ bao gồm cùng một thực thể thông qua phương thức Include mới của EF Core. Ngoài ra, hãy xem https://stackoverflow.com/a/46164203/4336725

Lý do tôi có một số truy vấn db không đồng bộ là vì EF Core hiện không hỗ trợ tải chậm (không giống như EF 6). https://github.com/aspnet/EntityFrameworkCore/issues/3797

Cách giải quyết của tôi là xác định một số IQueryable s với các cách rõ ràng khác nhau Include()ThenInclude().

Các vấn đề liên quan