首先是ORM代码 - 在设计期间修复

时间:2013-03-12 19:16:01

标签: c# asp.net-mvc entity-framework ef-code-first

我在理解MVC4简单Web应用程序中的对象关系映射时遇到了一些麻烦,其中有用户及其发布的注释。 一个用户必须有很多评论。所以我添加了UsersContextpublic 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 (...)

1 个答案:

答案 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>,您可以将其传递到循环中以在页面上显示,或者根据需要进一步过滤。