4

投稿には多くのトピックを含めることができます。トピックは多くの投稿に割り当てることができます。トピック リストから 2 つのトピックを選択して投稿を追加するNULLと、トピック テーブルにも 2 つのトピックが挿入されます。Id=34およびを参照してください35。私は何を間違えましたか?トピックは変更しないでください。新しい投稿を追加し、一定数のトピック (ドロップダウン リスト) からトピックを選択しています。PostTopics テーブル (PostID、TopicID) で追跡されます。

トピック表:

Id    TopicName   TopicDesc       
31    Sports  Sports  
32    Game    Game    
33    Politics    Politics    
34    NULL    NULL    
35    NULL    NULL

TopicPosts テーブル:

Topic_Id    Post_Id
34  11
35  11


public class Post
{
    public int Id { get; set; }
    public int UserId { get; set; }

    public virtual ICollection<Topic> PostTopics { get; set; }

}


public class Topic
{
    public int Id { get; set; }
    public string TopicName { get; set; }

    public virtual ICollection<Request> Requests { get; set; }

}

// insert code: I think the problem is here

  using (var context = new ChatContext())
  {
             // Post
             context.Posts.Add(pobjPost);

             pobjPost.PostTopics = new List<Topic>();
             // topics
             foreach (var i in pobjTopics)
             {

             pobjPost.PostTopics.Add(i);
             }

             context.SaveChanges();
   }
4

2 に答える 2

3

トピックを最初にコンテキストに添付して状態Unchangedにし、EFにトピックがデータベースにすでに存在していることを通知する必要があります。それ以外の場合、EFはトピックが新しいと見なし、データベースに挿入します。その後、投稿をコンテキストに追加して、投稿を多対多結合テーブルの関係レコードとともに新しいエンティティとしてデータベースに挿入できるようにします。

using (var context = new ChatContext())
{
    pobjPost.PostTopics = new List<Topic>();
    foreach (var pobjTopic in pobjTopics)
    {
        context.Topics.Attach(pobjTopic); // topic is in state Unchanged now
        pobjPost.PostTopics.Add(pobjTopic);
    }
    context.Posts.Add(pobjPost); // post in state Added, topics still Unchanged
    context.SaveChanges();
}
于 2012-07-22T13:53:13.563 に答える
0

関係を作成するには、関連する両方のオブジェクトを最初にコンテキストに追加する必要があります。

この方法を試してください:

using (var context = new ChatContext())
      {
                 // Post
                 context.Posts.Attach(pobjPost);

                 pobjPost.PostTopics = new List<Topic>();
                 // topics
                 foreach (var i in pobjTopics)
                 {

                 pobjPost.PostTopics.Add(i);
                 }
于 2012-07-19T00:37:01.447 に答える