Настройка ApplicationUser для хранения большего количества пользовательских данных в шаблоне ASP.NET Angular (dotnet core 3.0) - PullRequest
0 голосов
/ 28 апреля 2019

В настоящее время я работаю над веб-приложением ASP.NET с угловым интерфейсом.В качестве основы, новый шаблон присутствует в VisualStudio 2019 для ASP.NET angular, с индивидуальной аутентификацией.

Этот запуск выполняется на ядре dotnet 3.0 Preview 4.

enter image description here

Что я пытаюсь сделать, это добавить некоторые пользовательские данные в ApplicationUser по умолчанию.Скажем, мой ApplicationUser - студент, я хотел бы, чтобы этот студент брал несколько классов, и у каждого класса есть несколько назначений.

ApplicationUser -> * Class -> * Assignment

To doпоэтому я создал режимы для класса и присваивания и добавил отношения, например, так:

пример в ApplicationUser:

public class ApplicationUser : IdentityUser
{ 
    public virtual ICollection<Class> Classes { get; set; }
}

пример в классе:

public class Class
{
    public int ID { get; set; }
    public string Name { get; set; }
    public double CurrentGrade
    {
        get
        {
            if (Assignments.Count == 0)
            {
                return -1;
            }

            double grade = 0;
            foreach (Assignment a in Assignments)
            {
                grade += (a.Weight * a.Score);
            }

            return grade;
        }
    }

    public virtual ICollection<Assignment> Assignments { get; set; }

    public Class()
    {
        Assignments = new List<Assignment>();
    }

}

и пример в Назначении:

public class Assignment
{
    public int ID { get; set; }

    public virtual Class FromClass { get; set; }

    public string Name { get; set; }
    public double Weight
    {
        get { return Weight; }
        set
        {
            if (value <= 0 || value > 100)
            {
                throw new ArgumentException("The weight of the assignment should be between 0 and 100");
            }
            Weight = value;
        }
    }
    public double Score
    {
        get { return Score; }
        set
        {
            if (value <= 0 || value > 100)
            {
                throw new ArgumentException("The score of the assignment should be between 0 and 100");
            }

            Score = value;
        }
    }

    public Assignment()
    {

    }

    public Assignment(string name, double weight, double score)
    {
        this.Name = name;
        this.Weight = weight;
        this.Score = score;
    }

}

Таким образом, я добавил виртуальные теги для определения отношений между классами.

Наконец, класс ApplicationDbContext был изменен таким образомчто таблицы для новых сущностей генерируются (из моего понимания)

public class ApplicationDbContext : ApiAuthorizationDbContext<ApplicationUser>
{

    public virtual DbSet<Class> Classes { get; set; }

    public virtual DbSet<Assignment> Assignments { get; set; }

    public ApplicationDbContext(
            DbContextOptions options,
            IOptions<OperationalStoreOptions> operationalStoreOptions) : base(options, operationalStoreOptions)
    {

    }


    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // Invoke the Identity version of this method to configure relationships 
        // in the AspNetIdentity models/tables
        base.OnModelCreating(modelBuilder);

        // Add a configuration for our new table.  Choose one end of the relationship
        // and tell it how it's supposed to work
        modelBuilder.Entity<ApplicationUser>().HasMany(e => e.Classes);        // ApplicationUser has many Classes

        modelBuilder.Entity<Class>().HasMany(e => e.Assignments); 
    }


}

Я считаю, что это все, что нужно для достижения этой цели, но, возможно, чего-то не хватает.

Моя главная проблема сейчасэто страница регистрации.В шаблонный проект уже встроены функции входа и регистрации. Я хотел бы изменить страницу регистрации таким образом, чтобы при регистрации пользователь мог указать, в какие классы он вошел в систему. Так, когда его ApplicationUser создается и сохраняется вТаблица идентичности, классы, которые посещает пользователь (студент), также создаются и сохраняются в базе данных.

Страница регистрации шаблона, которую необходимо изменить: enter image description here

Проблема в том, что в шаблоне html / typcript-файлы, обрабатывающие это, нигде не найдены.Кто-нибудь знает, как я могу изменить эту страницу, чтобы она соответствовала приложению?(Было бы также неплохо избавиться от универсального текста «Пользователь другой службы для регистрации».)

1 Ответ

2 голосов
/ 07 мая 2019

Вы можете переопределить страницы входа по умолчанию, добавив "Identity" в исходное состояние.

Щелкните правой кнопкой мыши свой проект в обозревателе решений и выберите: Добавить-> Новый элемент лесов-> Идентичность

Затем нажмите Добавить. Вы можете выбрать, какие страницы вы хотите переопределить (или просто выбрать все). Страницы будут созданы в папке «Области / Идентичность».

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