.net 如何在EF多对多关系中添加新记录?
我正在做我的教程项目,我是实体框架的新手 我使用代码优先的方法有两个多关系表: 以下是表格定义:.net 如何在EF多对多关系中添加新记录?,.net,entity-framework,.net,Entity Framework,我正在做我的教程项目,我是实体框架的新手 我使用代码优先的方法有两个多关系表: 以下是表格定义: class EmployeeDBContext : DbContext { public EmployeeDBContext() : base("DefaultConnection") { } public DbSet<Course> Courses { get; set; } public DbSet<Student> Students { ge
class EmployeeDBContext : DbContext
{
public EmployeeDBContext() : base("DefaultConnection") { }
public DbSet<Course> Courses { get; set; }
public DbSet<Student> Students { get; set; }
}
//================================================My entities=================================================
public class Student
{
[Key]
public int StudentID { get; set; }
public string StudentName { get; set; }
public virtual ICollection<Course> Courses { get; set; }
}
public class Course
{
[Key]
public int CourseID { get; set; }
public string CourseName { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
class EmployeeDBContext:DbContext
{
public EmployeeDBContext():base(“DefaultConnection”){}
公共数据库集课程{get;set;}
公共数据库集学生{get;set;}
}
//==========================================================================我的实体=================================================
公立班学生
{
[关键]
公共int StudentID{get;set;}
公共字符串StudentName{get;set;}
公共虚拟ICollection课程{get;set;}
}
公共课
{
[关键]
public int CourseID{get;set;}
公共字符串CourseName{get;set;}
公共虚拟ICollection学生{get;set;}
}
课程表上有三个科目:历史、数学、物理
我需要添加新学生,并将该学生与现有课程联系起来
知道如何实现它吗?请尝试下面的代码:
取决于是否要更新课程名称或添加学生列表
public void UpdateCourse(string courseName, List<Student> students)
{
var dbInstance = new EmployeeDBContext();
Course model = (from item in dbInstance.Courses
where item.CourseID = courseid
select item);
model.CourseName = courseName;
foreach(var item in students)
{
var currentStudent = from stud in dbInstance.Students
where stud.StudentId == item.StudentId;
if( currentStudent != null)
currentStudent.Name = item.Name;
else
dbInstance.Students.Add(new Student() {.StudentId = item.StudentId, .Name = item.Name});
};
dbInstance.SaveChanges();
}
public void CreateCourse(string courseName, List<Student> students)
{
var model = new Course();
model.CourseName = courseName;
model.Students = students;
var dbInstance = new EmployeeDBContext();
dbInstance.Courses.Add(model);
dbInstance.SaveChanges();
}
public void UpdateCourse(字符串courseName,列出学生)
{
var dbInstance=new EmployeeDBContext();
课程模型=(来自dbInstance.Courses中的项目
其中item.CourseID=CourseID
选择项目);
model.CourseName=CourseName;
foreach(学生中的var项目)
{
var currentStudent=来自dbInstance.Students中的stud
其中stud.StudentId==item.StudentId;
如果(currentStudent!=null)
currentStudent.Name=item.Name;
其他的
dbInstance.Students.Add(new Student(){.StudentId=item.StudentId、.Name=item.Name});
};
dbInstance.SaveChanges();
}
公共课程(字符串courseName,列出学生)
{
var模型=新课程();
model.CourseName=CourseName;
模型。学生=学生;
var dbInstance=new EmployeeDBContext();
dbInstance.Courses.Add(模型);
dbInstance.SaveChanges();
}
如果您需要创建一个学生并为他添加一门课程(或更多课程),使用EF的方法与使用文字描述的方法相同
using (var ctx= new EmployeeDBContext())
{
// Create a new student (and set some properties)
Student student = new Student()
{
StudentName = "Scott Tiger"
};
// Replace courseId with the course id that you need to add to the student
student.Courses.Add(ctx.Courses.Find(courseId));
// Add other courses if you need to
// Let's write the student to the DB
ctx.Students.Add(student);
ctx.SaveChanges();
}
你有没有尝试过简单地提取你想要的课程,将它们添加到学生的课程集合中,然后保存学生?@eranotzap,没有,对我来说,这似乎很复杂,因为在EF中更新了。下面的答案正是我解释的。试试看。此外,花点时间看一个完整的EntityFramework课程,这会比你自己动手写节省更多的时间。。。Pluralsight有一个关于ef的课程,你可以很容易地找到它的种子。我没有课程名称,但我的课程ID已经存在于数据库中了!那么为什么我必须创建一个新课程呢?对,这是从函数名创建一个新课程。@Muks代码就是一个示例。如果你已经有了新的课程,你不需要创建新的课程。此外,示例创建课程并将学生添加到其中,但您也可以创建学生并添加课程。@Muks,您尝试过吗?我认为它不能工作。我认为学生应该在课程的同一个上下文中,但是你在函数中创建上下文。