如何在Entity Framework中创建用户喜欢的表格

时间:2016-07-31 14:07:43

标签: c# sql-server asp.net-mvc entity-framework

我有三个博客帖子表:

  • Post表格适用于PostIDTitle等帖子属性。
  • User表,用于UserID等作者属性
  • PostLike表包含两列,例如PostIDUserID,它们是外键列。此表存储用户喜欢的帖子。事实上,当用户喜欢帖子时,会在此表中插入一条记录。

我的代码是:

    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表没有那些外键。 有可能帮助我吗?

1 个答案:

答案 0 :(得分:0)

PostLike记录中的每条记录只有一个帖子和一个用户。所以你不需要收集类型。

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; }
}

现在要防止&#34;可能导致循环或多个级联路径&#34;错误,您只需要禁用级联删除。您可以在数据上下文类的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; }
}

这将创建包含3列IdPostID(FK)和UserID(FK)

的PostLikes表格