将ApplicationUser与Model关联

时间:2014-12-19 06:33:50

标签: c# asp.net asp.net-identity-2

我正在使用Visual Studio 2013中的Entity Framework 6开发一个简单的MVC 5应用程序。我想以下列方式将用户(来自ASP.NET Identity 2.0)与我自己的模型相关联:

有两种类型的用户(角色),作者和评分者。作者发表了一篇文章,评分者为这篇文章生成了成绩报告。任何评分者都可以对任何未评级的文章进行评分。作者将能够看到谁对他们的文章进行评分,所以我试图将2个用户与文章(以及成绩报告)联系起来。

我想知道我是否在正确的方向,或者我是否应该添加或修改某些内容。我已经阅读了一些有关覆盖onModelCreating方法的内容,因此我没有得到与密钥相关的一些错误,但我对此并不了解。

这些是我的模特。如您所见,Article和GradeReport之间存在一对一或一对一的关系。 GradeReport仅与一篇文章相关。

public class Article
{
    public int ArticleID { get; set; }
    public string Title { get; set;  }
    public string Content { get; set; }
    public DateTime Date { get; set; }
    public bool Status { get; set; } // To tell if it has been graded or not
    public string AuthorID { get; set; }
    public string? GraderID { get; set; }
    public int? GradeReportID { get; set; }

    public virtual ApplicationUser Author { get; set; }
    public virtual ApplicationUser Grader { get; set; }
    public virtual GradeReport GradeReport { get; set; }
}

public class GradeReport 
{
    [Key, ForeignKey("Article")]
    public int ArticleID { get; set;}
    public DateTime Date { get; set; }
    public string Grade { get; set; }
    public string Comments { get; set; }
    public string GraderID { get; set; }
    public string AuthorID { get; set; }

    public virtual Article Article { get; set; }
    public virtual ApplicationUser Grader { get; set; }
    public virtual ApplicationUser Author { get; set; }
}

这是我的ApplicationUser类。我添加了一些自定义属性,其中包括特定用户的文章和成绩报告。

public class ApplicationUser : IdentityUser
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        return userIdentity;
    }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public virtual ICollection<Article> Articles { get; set; }
    public virtual ICollection<GradeReport> GradeReports { get; set; }
}

这是我的DB上下文,它扩展了IdentityDbContext:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    static ApplicationDbContext()
    {
        Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

    DbSet<Article> Articles { get; set; }
    DbSet<GradeReport> GradeReports { get; set; }
}

我做得对吗?有没有更好的方法将用户与模型相关联?

0 个答案:

没有答案