2015-06-27 61 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

我明白你的意思了。沒有與班級完全相同的單獨班級是沒有辦法的? –