我目前正在开发一个以angular为前端的ASP.NET Web应用程序。作为基础,Visual Studio 2019中针对ASP.NET angular的新模板具有个人身份验证功能。
这是在dotnet core 3.0 Preview 4上运行的。
我想做的是将一些用户数据添加到默认的ApplicationUser中。 假设我的ApplicationUser是一名学生,我希望该学生参加多个班级,每个班级都有多个作业。
ApplicationUser-> *类-> *分配
为此,我为“班级”和“作业”创建了模式,并添加了类似的关系
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);
}
}
我相信这是完成此任务所需的全部,但也许缺少某些东西。
我现在的主要问题是注册页面。模板项目已经内置了登录和注册功能。我想修改注册页面,以便用户注册时可以指定当前登录的类。这样,在创建ApplicationApplication并将其保存在身份表,用户(学生)正在使用的类也将创建并保存在数据库中。
问题在于,在模板中找不到用于处理此问题的html / typescript文件。有谁知道我该如何修改此页面以适合应用程序? (最好不要使用“向用户注册另一个服务”通用文本。)
答案 0 :(得分:1)
您可以通过设置“身份”来覆盖默认登录页面。
在解决方案资源管理器中右键单击您的项目,然后选择:添加->新脚手架项目->身份
然后单击添加。您可以选择要覆盖的页面(或仅选择全部)。这些页面将在“区域/身份”文件夹中创建。