I need to get all the Students from the database and return List inside signalR Hub class, but every time I get null instead of that list and don't know why, I tried many ways to get that list but none of them worked, Can anyone help me please ;( I'm using asp net core, and I have debugged my application every things works fine but I get NULL instead of the list
namespace Student_Training.SignalR { [Authorize] public class ChatHub : Hub { private readonly TrainingDbContext _context; private readonly UserManager<IdentityUser> _userManager; private readonly ApplicationDbContext _Identitycontext; public ChatHub(TrainingDbContext context, UserManager<IdentityUser> userManager, ApplicationDbContext Identitycontext) { _context = context; _userManager = userManager; _Identitycontext = Identitycontext; } public override Task OnConnectedAsync() { Clients.All.SendAsync("BroadcastConnections", LstAllConnections); ConnectedUser.Ids.Add(Context.ConnectionId); return base.OnConnectedAsync(); } public override Task OnDisconnectedAsync(Exception exception) { ConnectedUser.Ids.Remove(Context.ConnectionId); return base.OnDisconnectedAsync(exception); } public async Task GetUsersToChat() { // Here we bring list of users // First Way var students = await _context.Student.Include(s => s.AcademicSupervisor).Include(s => s.Faculty).Include(s => s.Major).Include(s => s.OrganizationSupervisor).ToListAsync(); // Second Way by Service List<Student> users = new UsersListService().GetUsersToChat(); await Clients.All.SendAsync("BroadcastUsersToChat", students); } } }
THIS IS THE UsersListService:
namespace Student_Training.Services { public class UsersListService { private readonly TrainingDbContext _context; private readonly UserManager<IdentityUser> _userManager; private readonly ApplicationDbContext _Identitycontext; public UsersListService() { _context = new TrainingDbContext(); } // or list of identity user public List<Student> GetUsersToChat() { var students = _context.Student.Include(s => s.AcademicSupervisor).Include(s => s.Faculty).Include(s => s.Major).Include(s => s.OrganizationSupervisor); List<Student> studentslist = students.ToList(); return studentslist; } } }
THIS IS THE IDENTITY DbContext for users Accounts (UserId, Email, Passwords)
namespace Student_Training.Data { public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } } } THIS IS THE DbContext that contains STUDENT table:
namespace Student_Training.Data { public partial class TrainingDbContext : DbContext { public TrainingDbContext() { } public TrainingDbContext(DbContextOptions<TrainingDbContext> options) : base(options) { } public virtual DbSet<AcademicSupervisor> AcademicSupervisor { get; set; } public virtual DbSet<Faculty> Faculty { get; set; } public virtual DbSet<Major> Major { get; set; } public virtual DbSet<OrganizationSupervisor> OrganizationSupervisor { get; set; } public virtual DbSet<Student> Student { get; set; } public virtual DbSet<TrainingAdministrator> TrainingAdministrator { get; set; } public virtual DbSet<Message> Message { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { optionsBuilder.UseSqlServer("my-connection-string"); } } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<AcademicSupervisor>(entity => { entity.HasIndex(e => e.Email) .HasName("IX_AcademicSupervisorEmail") .IsUnique(); entity.HasIndex(e => e.PhoneNumber) .HasName("IX_AcademicSupervisorPhoneNumber") .IsUnique(); entity.HasOne(d => d.Faculty) .WithMany(p => p.AcademicSupervisor) .HasForeignKey(d => d.FacultyId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_AcademicSupervisor_Faculty"); }); modelBuilder.Entity<OrganizationSupervisor>(entity => { entity.HasIndex(e => e.Email) .HasName("IX_OrganizationSupervisorEmail") .IsUnique(); entity.HasIndex(e => e.PhoneNumber) .HasName("IX_OrganizationSupervisorPhoneNumber") .IsUnique(); }); modelBuilder.Entity<Student>(entity => { entity.HasIndex(e => e.Email) .HasName("IX_StudentEmail") .IsUnique(); entity.HasIndex(e => e.PhoneNumber) .HasName("IX_StudentPhoneNumber") .IsUnique(); entity.HasOne(d => d.AcademicSupervisor) .WithMany(p => p.Student) .HasForeignKey(d => d.AcademicSupervisorId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_Student_AcademicSupervisor"); entity.HasOne(d => d.Faculty) .WithMany(p => p.Student) .HasForeignKey(d => d.FacultyId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_Student_Faculty"); entity.HasOne(d => d.Major) .WithMany(p => p.Student) .HasForeignKey(d => d.MajorId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_Student_Major"); entity.HasOne(d => d.OrganizationSupervisor) .WithMany(p => p.Student) .HasForeignKey(d => d.OrganizationSupervisorId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_Student_OrganizationSupervisor"); }); modelBuilder.Entity<TrainingAdministrator>(entity => { entity.HasKey(e => e.AdministratorId) .HasName("PK_TrainingAdminstrator"); entity.HasIndex(e => e.Email) .HasName("IX_TrainingAdministratorEmail") .IsUnique(); entity.HasIndex(e => e.PhoneNumber) .HasName("IX_TrainingAdministratorPhoneNumber") .IsUnique(); entity.HasOne(d => d.Faculty) .WithMany(p => p.TrainingAdministrator) .HasForeignKey(d => d.FacultyId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_TrainingAdminstrator_Faculty"); }); modelBuilder.Entity<Message>(entity => { entity.Property(e => e.MsgId).ValueGeneratedNever(); entity.HasOne(d => d.AcaSender) .WithMany(p => p.Message) .HasForeignKey(d => d.UserId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_Message_AcademicSupervisor"); entity.HasOne(d => d.AdminSender) .WithMany(p => p.Message) .HasForeignKey(d => d.UserId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_Message_TrainingAdminstrator"); entity.HasOne(d => d.StudentSender) .WithMany(p => p.Message) .HasForeignKey(d => d.UserId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_Message_Student"); }); OnModelCreatingPartial(modelBuilder); } partial void OnModelCreatingPartial(ModelBuilder modelBuilder); } } THE STARTUP CLASS:
namespace Student_Training { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); services.AddIdentity<IdentityUser, IdentityRole>() .AddDefaultTokenProviders() .AddDefaultUI() .AddEntityFrameworkStores<ApplicationDbContext>(); services.Configure<IdentityOptions>(options => { options.Password.RequireDigit = true; options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5); options.User.RequireUniqueEmail = true; }); services.ConfigureApplicationCookie(options => { options.Cookie.HttpOnly = true; options.ExpireTimeSpan = TimeSpan.FromMinutes(5); options.LoginPath = "/Identity/Account/Login"; options.AccessDeniedPath = "/Identity/Account/AccessDenied"; options.SlidingExpiration = true; }); services.AddControllersWithViews(); services.AddRazorPages(options => { options.Conventions.AuthorizePage("/Students/StudentInfo/"); options.Conventions.AuthorizeFolder("/Private"); }); services.AddDbContext<TrainingDbContext>(options => { options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection2")); options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); }); services.AddAuthorization(options => { options.FallbackPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); }); services.AddSignalR(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapRazorPages(); endpoints.MapHub<ChatHub>("/chatHub"); }); } } } https://stackoverflow.com/questions/66775207/how-to-get-users-students-from-sql-server-database-by-asp-net-core-signalr March 24, 2021 at 01:25PM
没有评论:
发表评论