gpt4 book ai didi

c# - EF代码第一个: Insert Many to many

转载 作者:行者123 更新时间:2023-11-30 12:13:30 25 4
gpt4 key购买 nike

一个帖子可以有多个主题。一个主题可以分配给多个帖子。添加从主题列表中选择的两个主题的帖子时,两个 NULL 主题也插入到我的主题表中。请参阅 Id=3435。我做错了什么?主题不应更改。我正在添加一个新帖子并从固定数量的主题(下拉列表)中选择主题。它在 PostTopics 表(PostID,TopicID)中保持跟踪。

主题表:

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

主题帖子表:

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();
}

最佳答案

您必须首先将主题附加到上下文,以将它们置于状态 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();
}

关于c# - EF代码第一个: Insert Many to many,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11551760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com