2016-08-31 78 views
0

を挿入これは私のエンティティがどのように見えるかです:Entity Frameworkの多くに多く、

enter image description here

私の質問はNewsオブジェクトとどのようにニュースのCommentを更新し、削除するためにCommentオブジェクトを追加する方法ですか?ここで

Newsクラスです:

News news = db.News.SingleOrDefault(n => n.NewsId == Id); 
+3

私の意見では、あなたのモデルが改訂されなければなりません。私はあなたの 'NewsComment'エンティティの必要性を見ません。それは有用な情報を保持していません。 'Comment'を' News'のナビゲーションプロパティにします。それが多対多の場合、関係は 'NewsComment'エンティティを必要とせずに内部的に処理されます。 –

+1

これは実際のスキーマですか?ユーザーエクスペリエンスから、複数のニュース項目にコメントを適用できることは意味をなさないため、私は尋ねます。 –

+0

@ErikPhilips私は以前に(特にコメントのために)このタイプのモデルを使用してきました。これは多対多を意味するリレーションテーブルで実装されますが、実際には1つのコメントを複数の親オブジェクトにアタッチするべきではないため、1対多です。 –

答えて

2

モデルが今立っているとして、あなたはこのようにそれを行うことができます。個人的に

News news = db.News.SingleOrDefault(n => n.NewsId == Id); 
Comment comment = new Comment { Body = "This is my comment" }; 
NewsComment newsComment = new NewsComment { News = news, Comment = comment }; 
news.NewsComments.Add(newsComment); 
db.SaveChanges(); 

、私はNewsCommentエンティティを奪うようにあなたのモデルを調整します。 Newsエンティティは多対多のプロパティCommentsを持ち、リレーションテーブルは内部的に処理されます。あなたのコードは、その後になる:

News news = db.News.SingleOrDefault(n => n.NewsId == Id); 
Comment comment = new Comment { Body = "This is my comment" }; 
news.Comments.Add(comment); 
db.SaveChanges(); 

編集:、あなたの現在のモデルとのコメントを削除コレクションプロパティから削除するには:

News news = db.News.SingleOrDefault(n => n.NewsId == Id); 
NewsComment commentIDontWant = news.NewsComments.First(nc => nc.Comment.Body == "Bad Comment"); 
news.NewsComments.Remove(commentIDontWant); 
db.SaveChanges(); 
関連する問題