代码之家  ›  专栏  ›  技术社区  ›  zzdhxu

.NET核心EF核心2模型在1视图中创建操作

  •  1
  • zzdhxu  · 技术社区  · 6 年前

    嗨,我读了很多书,但我真的不知道这是怎么解决的。 跟随 this 教程中,我不太明白如何使用正确的外键映射同时将数据输入到2个模型中。

    假设我需要两个模型(遵循教程),例如学生和注册,我想同时向两个表输入数据,查看其他堆栈溢出帖子,我发现了将两个视图合并到模型中的两种方法,要么创建一个“大视图”,要么使用我在本例中所做的部分视图。因此,通过将2个对象返回到控制器并将其保存到数据库(如下所示),它可以工作,除了注册没有通过studentid(外键)与学生建立任何链接。有没有一种方法可以设置它或将它绑定在一起?

    目前,我可以将两个单独的数据集都保存到数据库中。我似乎不知道如何设置外键。

    我现在在2 DBS中拥有的是

    Student      | Enrollment
    ID LastName    ID <Some Column> StudentID
    1  XXX         1  XXX           NULL (Need this to be 1)
    

    我怎样才能让学生成为1?

    public async Task<IActionResult> Create([Bind("ID,LastName")] Student student, [Bind("<Some data inside enrollment>")] Enrollment enrollment)
            {
                if (ModelState.IsValid)
                {
                    _context.Add(student);
                    await _context.SaveChangesAsync();
                    _context.Add(enrollment);
                    await _context.SaveChangesAsync();
                return View(student);
            }
    

    非常感谢你!非常感谢您的帮助!:)

    2 回复  |  直到 6 年前
        1
  •  2
  •   Derviş Kayımbaşıoğlu    6 年前

    这会有帮助的,

    var resultStudent = _context.Add(student);
    enrollment.student_id = resultStudent.id;
    _context.Add(enrollment);
    await _context.SaveChangesAsync();
    

    enrollment.Student = student;
    _context.Enrollments.Add(enrollment);
    await _context.SaveChangesAsync();
    
        2
  •  0
  •   zzdhxu    6 年前

    修改了一下西蒙娜的回答,这对我很有效。似乎var resultstedent不是必需的,但是在控制器中设置id的一般思想是这样的。

    _context.Add(student);
    enrollment.studentID = student.ID;
    _context.Add(enrollment);
    await _context.SaveChangesAsync();