我在理解MVC4简单Web应用程序中的对象关系映射时遇到了一些麻烦,其中有用户及其发布的注释。
一个用户必须有很多评论。所以我添加了UsersContext
班public DbSet<UserWork> UserComments { get; set; }
public class UsersContext : DbContext
{
public UsersContext()
: base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<UserWork> UserComments { get; set; }
}
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int? UserComId { get; set; }
[ForeignKey("UserComId")]
public virtual UserComment UserComLog { get; set; }
}
public class UserComment
{
[Key]
public int UserComId{ get; set; }
public int UserId { get; set; }
public string Comments{ get; set; }
public DateTime postDate{get;set}
}
我现在仍然意识到每天发布的所有评论都是如何存储的,以便我以后可以进行查询,例如SELECT * FROM UserComment Inner join UserProfile ON UserComment.UserId=UserProfile.UserId WHERE postDate BETWEEN (...) AND (...)
答案 0 :(得分:1)
我假设你正在使用Code First Migrations。
似乎您需要稍微编辑UserProfile
类以允许用户拥有多条评论。您需要将UserComLog
作为集合。像:
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<UserComment> UserComLog { get; set; }
}
有了这个,你就会有一个有多个评论的用户。然后,使用UsersContext
,您可以访问Entity Framework为您创建的数据库表。您只需要使用数据上下文编写Linq语句来访问数据。
var context = new UsersContext();
var comments = context.UserComments.Where(d => d.postDate > new DateTime(2013,3,12) && d.postDate < new DateTime(2013,2,12) && d.UserId == userId);
comments
将是IQueryable<UserComment>
,您可以将其传递到循环中以在页面上显示,或者根据需要进一步过滤。