首页 > 解决方案 > 实体模型之间的关系问题

问题描述

我想在我的项目中创建一个喜欢和不喜欢的系统,我有一个用户模型,一个帖子模型,一个评论模型,关系如下:

用户 1 ---> * 发布

用户 1 ---> * 评论

发布 1 ---> * 评论

现在我想添加一个名为 Like 的新模型,其关系如下:

发布 1 ---> * 喜欢用户 1 ---> * 喜欢

但是当我想更新数据库时,我收到一条错误消息:“可能导致循环或多个级联路径”我发现如果我删除我的一个属性它会修复错误,例如:

public class Post
{

    public Post()
    {

    }

    [Key]
    public int Id { get; set; }

    public string Title { get; set; }

    public virtual List<Like> Likes { get; set; }

    public virtual List<Comment> Comments { get; set; }

}



public class Like
{

    public Like()
    {

    }

    [Key]
    public int Id { get; set; }

    public bool IsLike { get; set; }


    public int postId { get; set; } // I remove these properties

    public virtual Post post { get; set; }


    public int commentId { get; set; }  // I remove these properties

    public virtual Comment comment { get; set; }

}

为了修复“多级联”错误,我删除了“PostId”和“commentId”属性。

但是当我将实体(新数据)添加到数据库中的表(喜欢)时,我不知道我的帖子是如何重复的,我的意思是重复的帖子被添加到表中。

任何机构都可以告诉我这个问题吗?

标签: c#asp.net-mvcentity-framework-6ef-code-first

解决方案


为了更好的设计,将您的like表分开Post如下Comment

public class User
{
    [Key]
    public int Id { get; set; }

    //......

    public virtual List<Post> Posts { get; set; }

    public virtual List<Comment> Comments { get; set; }

    public virtual List<PostLikes> PostLikes { get; set; }

    public virtual List<CommentLIkes> CommentLikes { get; set; }
}


public class Post
{
    [Key]
    public int Id { get; set; }

    public string Title { get; set; }

    public virtual List<PostLike> PostLikes { get; set; }

    public virtual List<Comment> Comments { get; set; }
}

public class Comment
{
    [Key]
    public int Id { get; set; }

    public string CommentBody { get; set; }

    //.....

    public virtual List<CommentLike> CommentLikes { get; set; }
}

public class PostLike
{
    [Key]
    public int Id { get; set; }

    public int PostId { get; set; }

    public int UserId {get; set;}

    public bool IsLike { get; set; }

    public virtual Post post { get; set; }
    public virtual User User { get; set; }
}

public class CommentLike
{
    [Key]
    public int Id { get; set; }

    public int CommentId { get; set; }

    public int UserId {get; set;}

    public bool IsLike { get; set; }

    public virtual Comment Comment { get; set; }
    public virtual User User { get; set; }

}

现在生成一个全新的迁移并相应地更新数据库。

注意:您可能会在迁移更新时遇到级联删除问题。如果您面对,请告诉我,我将使用 Fluent API 配置更新答案。


推荐阅读