2015-06-27 57 views
-1

我有以下型号(伪):设置代码第一EF6外键发行对象

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 
} 

这里最重要的一点是,我like有一个外键都postcomment,因为每个岗位和评论可以有自己的实例(喜欢一个帖子vs喜欢评论)。

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

+0

的[MVCE](http://stackoverflow.com/help/mcve)将是非常在这种情况下理解。 – sstan

+0

@sstan这正是我的代码。我省略的唯一东西是样板{get;设置;}和分号。 –

回答

1

如果您删除了一篇文章,它会删除喜欢和评论。 你的喜欢会删除评论。

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

您可以编辑生成的代码第一个代码并将“cascadeDelete:true”更改为false,或者您可以修复您的类。

你应该有一个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; } 
} 
+0

说'你可以修好你的课程'并不是很有帮助,因为这正是我要求帮助的。类应该如何的一个例子会更有益 –

+0

按照建议创建LikeComment类。在你喜欢的类中移除对评论的引用并添加对LikeComment类的引用。 – MIKE

+0

我明白你的意思了。没有与班级完全相同的单独班级是没有办法的? –