В настоящее время я работаю над веб-приложением ASP.NET с угловым интерфейсом.В качестве основы, новый шаблон присутствует в VisualStudio 2019 для ASP.NET angular, с индивидуальной аутентификацией.
Этот запуск выполняется на ядре dotnet 3.0 Preview 4.
Что я пытаюсь сделать, это добавить некоторые пользовательские данные в 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 создается и сохраняется вТаблица идентичности, классы, которые посещает пользователь (студент), также создаются и сохраняются в базе данных.
Страница регистрации шаблона, которую необходимо изменить:
Проблема в том, что в шаблоне html / typcript-файлы, обрабатывающие это, нигде не найдены.Кто-нибудь знает, как я могу изменить эту страницу, чтобы она соответствовала приложению?(Было бы также неплохо избавиться от универсального текста «Пользователь другой службы для регистрации».)