为代码设置对象首先是EF6外键问题

时间:2015-06-27 20:40:06

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

我有以下模型(伪代码):

Post {
 int id

 List<Like> likes
 List<Comment> comments
}

Comment {
 int id

 List<Like> likes

 int PostId -- FK to Post
 Post Post
}

Like {
 int id

 int CommentId -- FK to Comment
 Comment Comment

 int PostId -- FK to Post
 Post Post
}

这里重要的一点是我的likepostcomment的外键,因为每个帖子和评论都有自己的实例(喜欢帖子和喜欢的帖子)评论)。

实体框架抱怨多个级联路径,构建这些实体的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

如果删除帖子,它会删除喜欢和评论。 您的喜欢会删除评论。

多个级联路径,因为您要删除两次注释。

您可以编辑生成的代码第一个代码并更改&#34; cascadeDelete:true&#34;为假或你可以修理你的课程。

你应该有一个LikeComment类。

public class Comment
{
    public int Id { get; set; }
    public List<CommentLike> Likes { get; set; }
    public int PostId { get; set; }
    public Comment()
    {
        Likes = new List<CommentLike>();
    }
}
public class Like
{
    public int Id { get; set; }
}
public class Post
{
    public int Id { get; set; }
    public List<PostLike> Likes { get; set; }
    public List<PostComment> Comments { get; set; }
    public Post()
    {
        Likes = new List<PostLike>();
        Comments = new List<PostComment>();
    }
}


public class PostComment : Comment
{
    public int PostId { get; set; }
    [ForeignKey("PostId")]
    public virtual Post Post { get; set; }
}
public class LikeComment : Comment
{
    public int LikeId { get; set; }
    [ForeignKey("LikeId")]
    public virtual Like Like { get; set; }
}


public class PostLike : Like
{
    public int PostId { get; set; }
    [ForeignKey("PostId")]
    public virtual Post Post { get; set; }
}

public class CommentLike : Like
{
    public int CommentId { get; set; }
    [ForeignKey("CommentId")]
    public virtual Comment Comment { get; set; }
}