在不知道ID的情况下添加到数据库

时间:2014-12-17 22:29:42

标签: c# asp.net asp.net-mvc entity-framework

我有这个

public class SchoolContext : DbContext
{
    public DbSet<Course> Courses { get; set; }
    public DbSet<Student> Students { get; set; }
}

让我们说学生和课程只有一个名字和一个ID ......学生只有一门课程而一门课程只有一名学生

现在在我的特殊控制器方法中,我想同时添加一个学生和一个课程,所以我这样做:

Student newStudent = new Student();
newStudent.Name = "banana";

db.Students.Add(newStudent);
db.SaveChanges();

但是等我希望这个学生与新课程相关,但是我不知道学生ID,因为它是由数据库生成的,我注意到在调试后将学生添加到数据库中可以使用此

获取其ID
newStudent.ID 

所以我只想添加一个这样的课程:

Course newCourse = new Course();
newCourse.Name = "platano";
Course.StudentID = newStudent.ID; //<-----newStudent.ID

db.Courses.Add(newCourse);
db.SaveChanges();

所以我的问题是,这种同时添加两件事的方式有什么问题吗?

学生的课程(其CourseID及其虚拟课程变量)是否与新课程自动相关?

2 个答案:

答案 0 :(得分:2)

您可以通过链接实体来避免担心学生的身份。

Student newStudent = new Student();
newStudent.Name = "banana";
db.Students.Add(newStudent);

Course newCourse = new Course();
newCourse.Name = "platano";
newCourse.Student = newStudent;
db.Courses.Add(newCourse);

db.SaveChanges();

此外,您可能有充分的理由这样做,但在Course类上拥有Student属性似乎有点奇怪。在Student类上拥有Course属性可能更有意义。

答案 1 :(得分:0)

这完全没问题,但有一些事情需要提及。

首先,如果你正在做的是一个工作单元,那么你应该把它包装在一个事务中 - 多亏了这个修改数据的所有db操作成功或者所有这些操作失败。

我还会更改Course类,以便它将引用(属性)到Student实体,而不仅仅是Student的id。