我正在尝试将学生实体添加到数据库中,如下所示:
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public Course Course { get; set; }
}
Course类如下:
public class Course
{
public int ID { get; set; }
public string Name { get; set; }
}
“课程”表中的数据:
| ID | Course |
------------------------
| 1 | Math |
-----------------------
| 2 | Physics |
-----------------------
当我按如下所示定义学生时:
var student = new Student
{
Name = "ABC",
Course = new Course { ID = 1, Name = "Math"}
};
并尝试添加它
context.Students.add(student);
await context.SaveChangesAsync()
未添加实体。我添加了这一行代码
context.Entry(student).State = EntityState.Added;
但没有任何改变。
答案 0 :(得分:1)
首先,您必须将外键 CourseId 设置为您的学生实体。
A)学生实体
public class Student
{
public int StudentID { get; set; }
public string Name { get; set; }
public int CourseID { get; set; } //This is foreign key
public virtual Course Course { get; set; }
}
B)课程实体:ICollection属性为您提供具有特定课程ID的所有学生。
public class Course
{
public int CourseID { get; set; }
public string Name { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
1)如果您在新课程中添加了新的学生记录,则
Course course = new Course
{
Name = "Math"
};
Course insertedCourse = context.Courses.Add(course);
Student student = new Student
{
CourseID = insertedCourse.CourseID,
Name = "ABC"
};
context.Students.Add(student);
await context.SaveChangesAsync();
2)如果必须从数据库中引用现有课程,则必须从数据库中获取课程并将CourseId分配给学生实体。
Course existingCourse = GetCourseByIdFromDatabase();
Student student = new Student
{
CourseID = existingCourse.CourseID, //This ID comes from Db
Name = "ABC"
};
context.Students.Add(student);
await context.SaveChangesAsync();
尝试一次,可能对您有帮助。
已编辑:
据我对您的最后评论的理解,
如果您想让学生学习相应的课程,那么
您的获取学生方法如下
public Student GetStudent(int Id)
{
Student student = context.Students.Find(Id);
return new Student
{
StudentID = student.StudentID,
Name = student.Name,
Course = student.Course
};
}
您可以通过以下方式访问学生的课程的广告
Student student = GetStudent(1);
string CourseName = student.Course.Name;
您可以根据需要将async
和await
与以上代码一起使用。