如何在实体框架中创建用户喜欢帖子的表格

本文关键字:喜欢 表格 用户 创建 实体 框架 | 更新日期: 2023-09-27 17:59:26

我有三个博客文章表:

  • 发布属性如PostIDTitle等的Post
  • User表用于作者属性,如UserID
  • PostIDUserID两列组成的PostLike表,它们是外键列。该表存储了用户喜欢的帖子。事实上,当用户喜欢某个帖子时,会在该表中插入一条记录

我的代码是:

    public partial class Post
      {
        public Post()
             {
             }
        public int PostID { get; set; }
        [Required, StringLength(150)]
        public string Title { get; set; }
        public int UserID { get; set; }
        public virtual User User { get; set; }
      }
    public partial class User
      {
        public User()
            {
              Posts = new HashSet<Post>();
            }
        public int UserID { get; set; }
        [Required,StringLength(50)]
        public string Name{ get; set; }
        public virtual ICollection<Post> Posts { get; set; }
      }
    public partial class PostLike
     {
        public PostLike()
           {
             Posts = new HashSet<Post>();
             Users = new HashSet<User>();
           }
         [Key,Column(Order = 0),ForeignKey("Posts")]
         public int PostID { get; set; }
         [Key, Column(Order = 1),ForeignKey("Users")]
         public int UserID { get; set; }
         public virtual ICollection<Post> Posts { get; set; }
         public virtual ICollection<User> Users { get; set; }
     }

但在创建数据库时,PostLike表没有任何外键,User表有两个外键,如PostLike_PostIDPostLike_UserID。需要指出的是,Post表并没有这些外键。有可能帮助我吗?

如何在实体框架中创建用户喜欢帖子的表格

PostLike记录中的每条记录将只有一个Post和一个User。因此,您不需要集合类型。

public class PostLike
{
  public int Id { set; get; }
  public int PostID { get; set; }
  public int UserID { get; set; }
  public virtual Post Post { get; set; }
  public virtual User User { get; set; }
}

现在,为了防止"可能导致循环或多个级联路径"错误,您只需要禁用级联删除。您可以在数据上下文类的OnModelCreating方法中执行此操作。

public class YourDataContex : DbContext()
{    
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    { 
       modelBuilder.Entity<PostLike>()
       .HasRequired(c => c.User)
       .WithMany()
       .WillCascadeOnDelete(false);
    }
    public DbSet<User> Users { set; get; }
    public DbSet<Post> Posts { set; get; }
    public DbSet<PostLike> PostLikes { set; get; }
}

这将创建PostLikes表,其中包含3列IdPostID(FK)和UserID(FK