【发布时间】:2015-04-16 16:35:31
【问题描述】:
这是我的两个示范班学生和课程
public class Student
{
private readonly IStudentOps _studentOps;
public Student(IStudentOps studentOps)
{
_studentOps = studentOps;
}
public int Id { get; set; }
public string Name { get; set; }
public DateTime BirthDate { get; set; }
public Student()
{
Courses = new List<Course>();
}
public virtual IList<Course> Courses { get; set; }
public bool Enrol(Student student)
{
return _studentOps.EnrolOrUpdate(student);
}
public IEnumerable<Course> SeeCourses()
{
return _studentOps.SeeCourses();
}
}
public class Course
{
public int Id { get; set; }
public string Name { get; set; }
public virtual IList<Student> Students { get; set; }
}
这是我的学生类接口和服务
public interface IStudentOps
{
bool EnrolOrUpdate(Student student);
IEnumerable<Course> SeeCourses();
}
public class StudentOps : IStudentOps
{
public bool EnrolOrUpdate(Student student)
{
using (var context = new StudentContext())
{
if (student.Id == 0)
{
context.Students.Add(student);
context.SaveChanges();
return true;
}
var tempStudent = context.Students.FirstOrDefault(x => x.Id == student.Id);
// ReSharper disable once InvertIf
if (tempStudent == null) return false;
context.Students.Attach(tempStudent);
tempStudent.Id = student.Id;
tempStudent.Name = student.Name;
tempStudent.BirthDate = student.BirthDate;
tempStudent.Courses = student.Courses;
context.Entry(tempStudent).State = EntityState.Modified;
context.SaveChanges();
return true;
}
}
public IEnumerable<Course> SeeCourses()
{
return new List<Course>() { new Course() { Name = "Social" }, new Course() { Name = "Science" } };
}
}
上下文类
class StudentContext : DbContext
{
public StudentContext() :
base("Name=StudentConn")
{
}
public DbSet<Student> Students { get; set; }
public DbSet<Course> Courses { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Student> ().HasMany(c=>c.Courses).WithMany(x=>x.Students)
.Map(
m =>
{
m.MapLeftKey("StudentId");
m.MapRightKey("CourseId");
m.ToTable("Student_Course");
});
}
}
数据库中的数据
学生(表)
身份证 姓名 出生日期
21 佩德罗 2015-04-16 16:12:49.270
22 约翰 2015-04-14 16:12:49.270
23 希夫 2015-04-16 16:13:45.240
课程(表)
身份证号
26 科学
27 地理
28 测试课程
29 空
Student_Course(表)
学生 ID 课程 ID
23 28
23 29
使用 StudentOps 表中的代码,我正在尝试更新名为 Shiv 的学生以拥有课程 26(科学)和 27(地理)而不是 28(测试课程)和 29(NUll)(在多对多表中)Student_Course。但是每次我这样做时,它都会在表中插入重复的条目而不是更新它。从代码更新 Student_Course 表的最佳方法是什么?有人来帮忙吗?提前致谢
【问题讨论】:
标签: c# .net linq entity-framework