2017-06-04 20 views
7

Trong vài ngày qua tôi đã chiến đấu với hệ thống Identity kết hợp với khung Entity Core. Dưới đây là một số thông tin trước khi tiết lộ vấn đề của tôi:Sử dụng EFCore với Identity cho Core

  1. Entity framework Core không hỗ trợ tải lười biếng, điều này có nghĩa là tôi đang sử dụng tải háo hức bằng cách nói mà mặt hàng bao gồm
  2. Để nói trước với các hạng mục một đối tượng tôi muốn lấy tôi ghi đè lên một phương pháp trong mỗi kho (các thuộc tính lấy ra là liên tục cho bây giờ)
  3. hệ thống nhận dạng tôi đang sử dụng được cấu hình như sau:

    services.AddIdentity<ApplicationUser, ApplicationRole>(options => 
    { 
        options.Cookies.ApplicationCookie.AutomaticChallenge = false; 
    }) .AddUserManager<UserManager>() 
        .AddRoleManager<RoleManager>() 
        .AddUserStore<UserStore>() 
        .AddRoleStore<RoleStore>() 
        .AddEntityFrameworkStores<ApplicationDbContext, int>() 
        .AddDefaultTokenProviders(); 
    
.210

Bây giờ vào vấn đề chính:

Tôi muốn sử dụng hệ thống nhận diện để tạo ra thẻ, có được người dùng vv nhưng tôi không thể làm bốc háo hức trên đối tượng UserManager chính nó như nó là phương pháp trở Task<ApplicationUser>Include() chính phương thức đó yêu cầu IQueryable (để tải nhanh). Cách chung để cả hai có thể sử dụng tải mong muốn và UserManager là gì?

+0

Bạn có thể theo dõi sự cố tại https://github.com/aspnet/Identity/issues/1082#issuecomment-273514725. Tôi nghĩ điều đó tốt cho việc giải quyết vấn đề của bạn. –

Trả lời

2

Cách đơn giản nhất có thể gọi trực tiếp cho UserManger.Users. Như thế này:

ApplicationUser user = await userManager.Users.Include(s => s.Sales).Where(e => e.Email == "[email protected]").FirstOrDefaultAsync(); 
0

Có lẽ bạn muốn sử dụng tải háo hức và UserManager như sau:

private async Task<ApplicationUser> GetSingleUser(Expression<Func<ApplicationUser, bool>> 
     predicate, params Expression<Func<ApplicationUser, object>>[] includeProperties) 
    { 
     IQueryable<ApplicationUser> query = _userManager.Users; 
     foreach (var includeProperty in includeProperties) 
     { 
      query = query.Include(includeProperty); 
     } 

     return await query.Where(predicate).FirstOrDefaultAsync(); 
    } 

Hope trợ giúp này!

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