0

我在理解 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 (...)

4

1 回答 1

1

我假设您正在使用 Code First 迁移。

似乎您需要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>,然后您可以将其传递到循环中以显示在页面上,或者如果您愿意,可以进一步过滤。

于 2013-03-12T19:26:51.997 回答