自定义“ ApplicationUser”以在ASP.NET Angular模板(dotnet core 3.0)中保存更多用户数据

时间:2019-04-28 15:44:57

标签: asp.net angular visual-studio-2019 asp.net-core-3.0

我目前正在开发一个以angular为前端的ASP.NET Web应用程序。作为基础,Visual Studio 2019中针对ASP.NET angular的新模板具有个人身份验证功能。

这是在dotnet core 3.0 Preview 4上运行的。

enter image description here

我想做的是将一些用户数据添加到默认的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并将其保存在身份表,用户(学生)正在使用的类也将创建并保存在数据库中。

需要修改的模板注册页面: enter image description here

问题在于,在模板中找不到用于处理此问题的html / typescript文件。有谁知道我该如何修改此页面以适合应用程序? (最好不要使用“向用户注册另一个服务”通用文本。)

1 个答案:

答案 0 :(得分:1)

您可以通过设置“身份”来覆盖默认登录页面。

在解决方案资源管理器中右键单击您的项目,然后选择:添加->新脚手架项目->身份

然后单击添加。您可以选择要覆盖的页面(或仅选择全部)。这些页面将在“区域/身份”文件夹中创建。