Tôi đang triển khai Mô hình bằng EF 6.1.3 và .NET Framework 4.6.1. Mô hình này được sử dụng bởi một ứng dụng ASPNET và bởi một ứng dụng ASPNET CORE, vì lý do đó nó sử dụng System.Data.Entity và nó nằm trong một mymodel.dll lắp ráp riêng biệt.Chỉ những nguồn triển khai IAsyncEnumerable mới có thể được sử dụng cho các hoạt động không đồng bộ của Entity Framework
Đây là mô hình
using System.Data.Entity;
public partial class MyDbContext : DbContext
{
public virtual DbSet<Athlete> Athletes{ get; set; }
}
public partial class Athlete
{
public Athlete()
{
}
//...
public string Country { get; set; }
}
Tôi đang phát triển ứng dụng MVC được thực hiện trong lõi aspnet với .NET Framework 4.6. Nó tham khảo EF 6.1.3 sao cho mô hình có thể được sử dụng.
public class MyViewModel
{
public IList<Athlete> ItalianAthletes{ get; set; }
}
using Microsoft.EntityFrameworkCore;
//solution: comment the previous line and use instead System.Data.Entity;
public class MyController : Controller
{
private readonly MyDbContext _context;
//...
public IActionResult Index()
{
MyViewModel myvm = new MyViewModel();
var result = _context.Athletes.Where(a=>a.Country=="Italy").ToList();
myvm.ItalianAthletes = result ;
return View(myvm);
}
}
... và nó hoạt động như mong đợi.
Bây giờ thay đổi phương pháp Chỉ số async
public async Task<IActionResult> Index()
{
MyViewModel myvm = new MyViewModel();
var result = _context.Athletes.Where(a=>a.Country=="Italy").ToListAsync();
await result; //at this point an exception is thrown
//...
}
InvalidOperationException: Nguồn IQueryable không thực hiện IAsyncEnumerable. Chỉ những nguồn thực hiện IAsyncEnumerable mới có thể được sử dụng cho các hoạt động không đồng bộ của Entity Framework.
Xóa mệnh đề Where() vẫn tồn tại, vì vậy vấn đề có vẻ liên quan đến ToListAsync();
var result = _context.Users.ToListAsync();
Cẩn thận đọc văn bản của ngoại lệ Tôi hiểu rằng "IQueryable tạo ra bởi ToList() doesnt thực hiện IAsyncEnumerable" nhưng điều này không có ý nghĩa với tôi bởi vì tất cả những gì hành vi là nội bộ để ToListAsync();
Ai đó có thể giúp tôi hiểu rõ hơn những gì đang xảy ra ở đây dưới mui xe? và tôi có thể làm gì để ToListAsync() hoạt động như mong đợi?
cảm ơn bạn trước vì bất kỳ nhận xét nào
có thể được trợ giúp cho bạn: https://msdn.microsoft.com/en-us/data/dn313107 – Sampath
chỉnh sửa mã bằng giải pháp –