我正在使用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; }
}
我做得对吗?有没有更好的方法将用户与模型相关联?