【发布时间】:2018-06-25 05:26:22
【问题描述】:
您好,我在从 ASP.NET Core 中的 Razor 页面访问用户表时遇到问题
我创建了一个扩展 IdentityDbContext<Models.User, Models.UserRole, string> 的 AppDataContext 类
我可以毫无问题地将它与其他控制器类和服务一起使用。但是当我开始处理剃须刀页面时,dataContext.Users 总是返回空的可枚举。其他DbSets 仍然可以正常工作,只有Users 不能正常工作。
当我尝试从 UserManager.Users 或 SigniInManager.UserManager.Users 等其他服务访问数据时也会发生这种情况
这是我文件的一部分
AppDataContext
public class AppDataContext : IdentityDbContext<Models.User, Models.UserRole, string>
{
// Other DbSet's
public AppDataContext(DbContextOptions<AppDataContext> options) : base(options) { }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Other entities building
MapIdentityTables(builder);
}
private void MapIdentityTables(ModelBuilder builder)
{
builder.Entity<Models.User>().ToTable("Users");
builder.Entity<IdentityUser>().ToTable("Users");
builder.Entity<Models.UserRole>().ToTable("UserRoles");
builder.Entity<IdentityRole>().ToTable("UserRoles");
builder.Entity<IdentityUserClaim<string>>().ToTable("UserClaims");
builder.Entity<IdentityUserRole<string>>().ToTable("UserUserRoles");
builder.Entity<IdentityUserLogin<string>>().ToTable("UserLogins");
builder.Entity<IdentityRoleClaim<string>>().ToTable("UserRoleClaims");
builder.Entity<IdentityUserToken<string>>().ToTable("UserTokens");
}
LoginPage.cshtml.cs
public class LoginModel : PageModel
{
private readonly Identity.AppUserManager userManager;
private readonly SignInManager<Models.User> signInManager;
private readonly Data.AppDataContext dataContext;
public LoginModel(Identity.AppUserManager userManager, SignInManager<Models.User> signInManager, Data.AppDataContext dataContext)
{
this.userManager = userManager;
this.signInManager = signInManager;
this.dataContext = dataContext;
}
public IList<Model.User> Users { get; private set; }
public void OnGet()
{
Users = userManager.Users.ToList(); // Empty
Users = signInManager.UserManager.Users.ToList(); // Empty
Users = dataContext.Users.ToList(); // Empty
}
}
User类
public class User : Microsoft.AspNetCore.Identity.IdentityUser
{
public ICollection<UserDevice> Devices { get; set; }
public IList<UserPassword> Passwords { get; set; }
}
我做错了什么还是错过了什么?
更新
在我放弃并做其他事情之后,问题现在不知何故消失了。但这不是一个解决方案,因为如果我这样做,原来的问题仍然存在。
我所做的是还原我的所有更改并从this SO answer 添加AddSecondIdentity。创建了StaffUser : IdentityUser 和StaffUserManager<StaffUser, UserRole>(与原始UserRole 相同的UserManager)来处理这些新的IdentityUser 对象。
然后我只使用StaffUserManager 和SignInManager<StaffUser> 而不是Login.cshtml.cs 中的AppUserManager 和SignInManager<User>
public LoginModel(StaffUserManager userManager, SignInManager<Models.StaffUser> signInManager, Data.AppDataContext context)
{
var users = context.Users.ToList() // 1 user
}
这让我更加困惑。但我现在没有时间做这个。我认为这与数据库的Discriminator 部分有关,因为返回的用户是具有StaffUser 鉴别器值的用户,但还有一些没有鉴别器的其他用户没有返回。
【问题讨论】:
-
我可以看看你的用户类。您想将 User 类与 IdentityUser 一起使用吗?如果是这样,请查看我的代码github.com/Awesome-CMS-Core/Awesome-CMS-Core/blob/master/src/…
-
@NgôHùngPhúc 我在原帖中添加了我的
User课程。是的,它源自IdentityUser -
这个问题你解决了吗
-
我解决了我的问题,如更新部分所述。但是解决方案与原始问题无关。所以我认为我还没有解决原来的问题。
标签: asp.net-core asp.net-core-mvc asp.net-identity asp.net-core-2.0 asp.net-core-mvc-2.0