-1
这是一种更新方法。从视图来看,用户可以改变现有学生,老师或主题的数据。EF6在保存前检查每个实体的更改
我返回一个视图模型到由这些3个不同的实体的控制器:
- 视图模型 -
public class StudentTeacherVM
{
public StudentModel Student { get; set; }
public TeacherModel Teacher { get; set; }
public SubjectModel Subject { get; set; }
}
在我在VM分割出的数据到控制器该数据库的实体,然后将其保存:
using (var db = new SchoolEntities())
{
Student student = new Student()
{
StudentId = model.StudentId,
FirstName = model.FirstName,
LastName = model.LastName,
EmailAddress = model.StudentEmailAddress,
TeacherId = model.TeacherId
};
Teacher teacher = new Teacher()
{
TeacherId = model.TeacherId,
FirstName = model.FirstName,
LastName = model.LastName,
EmailAddress = model.TeacherEmailAddress
SubjectId = model.SubjectId
};
Subject subject = new Subject()
{
SubjectId = model.SubjectId,
Description = model.SubjectDescription,
Level = model.SubjectLevel
};
db.Entry(subject).State = EntityState.Modified;
db.Entry(teacher).State = EntityState.Modified;
db.Entry(student).State = EntityState.Modified;
db.SaveChanges();
}
有时一个或多个科目不被修改,所以当代码获取到这一步,它抛出了“商店更新,插入或删除小号声明影响了意外的行数(0)“错误。
如何在保存之前检查每个实体的更改,以便在没有更改的情况下跳过实体?
当实体没有被更改时,但是当实体是新的并且必须被添加时,不会抛出异常。 –
我认为你需要将它们添加到DbSet,而不是手动搞乱更改状态,但是我对你的应用程序并不了解。 – Casey
凯西 - 什么意思是“将它们添加到DbSet”? – BattlFrog