如何在asp.net核心中的嵌套表中插入数据

时间:2019-06-25 06:31:32

标签: c# asp.net-core

假设我有3个不同的表格,表格->主题->具有导航属性的问题。
这些表看起来像

  

Form:FormId,(列表)主题|主题:TopicId,(列表)问题|问题:QuestionId,内容

我想将数据插入到Question表,但是我需要为FormId和TopicId指定一个ID,以标识要插入的表单和主题。

我已经尝试过此代码

var ref = _context.Form.Include(t=>t.Topic).ThenInclude(q=>q.Question).Add(Data);

但是找不到对问题表的引用,因此我无法向表中插入数据。
有谁知道如何像这样将数据插入嵌套表?

1 个答案:

答案 0 :(得分:0)

您已经知道此“问题”正在添加到哪个“主题”中。您应该找到它并向其中添加“问题”,然后更新并保存上下文。 在这种情况下,应将“ TopicId”添加到“问题”。

请看我的例子:

public class Form
{
    [Key]
    public int Id { get; set; }
    public List<Topic> Topics { get; set; }
}

public class Topic
{
    [Key]
    public int Id { get; set; }
    public List<Question> Questions { get; set; }

    public int FormId { get; set; }
    [ForeignKey("FormId")]
    public Form Form { get; set; }
}

public class Question
{
    [Key]
    public int Id { get; set; }
    public string Content { get; set; }

    public int TopicId { get; set; }
    [ForeignKey("TopicId")]
    public Topic Topic { get; set; }
}

迁移后,它是这样的:

enter image description here

现在,让我在该结构中添加一个“问题:

Question question = new Question() { Content = "Some content", TopicId = 1 };
Topic topic = dbContext.Topics.SingleOrDefault(x => x.Id == question.TopicId);
if(topic != null)
{
    topic.Questions.Add(question);
    dbContext.SaveChanges();
}

希望对您有帮助。