Как мне прочитать из таблицы dbo.AspNetUsers? - PullRequest
0 голосов
/ 19 марта 2020

Я хочу получить данные из Identity-таблицы dbo.AspNetUsers, но я не выяснил, как их запросить.

Это мой db-контекст:

public class ProjectsDbContext : IdentityDbContext<IdentityUser>
{
    public ProjectsDbContext(DbContextOptions<ProjectsDbContext> options) : base(options) { }

    public DbSet<Project> Projects { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        if (modelBuilder == null)
        {
            throw new NullReferenceException();
        }

        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<Project>()
            .HasMany(c => c.ChildProjects)
            .WithOne(p => p.ParentProject)
            .HasForeignKey(p => p.ParentProjectId);
    }
}

Это мой User -класс:

public class User : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Это мой запрос, который не работает:

List<User> projectOwners = await db.Users.ToListAsync();

Полученное сообщение об ошибке:

Невозможно неявно преобразовать тип 'System.Collections.Generi c .List 'to' System.Collections.Generi c .List '

Если я заменю List<User> на var в запросе, ошибка исчезнет, ​​но полученная коллекция не содержит каких-либо свойств из моего собственного User -класса.

Как получить доступ к AspNetUsers, включая мои собственные дополнительные свойства, определенные в User?

1 Ответ

1 голос
/ 19 марта 2020

Предполагая, что вы настраиваете свой проект более или менее в соответствии со стандартным шаблоном, я полагаю, что вы можете использовать тип переопределения для вашего удостоверения пользователя следующим образом:

Startup.cs

 public void ConfigureServices(IServiceCollection services)
        {
            // pretty standard initialisation so far
            services.AddDbContext<ProjectsDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));
            services.AddDefaultIdentity<User>(options => options.SignIn.RequireConfirmedAccount = false) // this is the key - put your custom User Identity here
                .AddEntityFrameworkStores<ProjectsDbContext>();
        }

ProjectsDbContext.cs

public class User : IdentityUser
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    public class ProjectsDbContext: IdentityDbContext<User> // this is your custom User type
    {
        public ProjectsDbContext(DbContextOptions<ProjectsDbContext> options)
            : base(options)
        {
        }
    }

тогда, так как вы изменяете модель данных, вам нужно будет перенести схему:

PM> Add-Migration change_IdentityUser
PM> Update-Database

вы заметите, что миграция добавляет ваши настраиваемые поля в таблица:

public partial class change_IdentityUser : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.AddColumn<string>(
                name: "FirstName",
                table: "AspNetUsers",
                nullable: true);

            migrationBuilder.AddColumn<string>(
                name: "LastName",
                table: "AspNetUsers",
                nullable: true);
        } 
.......

и, наконец, все ссылки на SignInManager / UserManager и другие помощники необходимо будет обновить с помощью нового параметра типа generi c:

_LoginPartial. CS html

@inject SignInManager<User> SignInManager
@inject UserManager<User> UserManager
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...