比方说,我有一个非常简单的对象,该对象显示在WPF应用程序的列表中。该对象看起来像这样:
class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
// ...some addtional properties, of course
// Status could be Active, InActive, OnBreak, etc.
public int StudentStatusId { get; set; }
public StudentStatusModel { get; set; }
}
现在,如果我提出一种通过Entity Framework(或我猜想的任何其他ORM)更改学生身份的方法,则它看起来可能像这样:
class StudentService
{
public async Task ChangeStudentStatus(int studentId, int newStatusId)
{
var student = GetStudent(studentId); // Method which returns the student by id via EF
student.StudentId = newStudentId; // Change the student property
await UpdateStudent(student); // Method which updates the enity in EF and saves changes
}
}
问题是,如果我调用ChangeStatus()
方法,那么我的数据库就可以了,但是应用程序中的集合将被破坏,如下所示:
class MyViewModel
{
public List<StudentModel> Students { get; set; }
public StudentModel SelectedStudent { get; set; }
public ChangeSelectedStudentStatus(int status)
{
var service = ServiceFactory.GetStudentService();
await service.ChangeStatus(SelectedStudent.StudentId, status);
// Now both SelectedStudent and Students are out of sync with database
}
}
解决此问题的最佳方法是什么?我可以想到三个选择,但是我无法弄清楚这三个选择是否是一个好的解决方案,或者我是否会完全以错误的方式来解决这个问题。
ChangeStatus
方法返回更新后的实体,因此它变为Task<StudentModel> ChangeStatus()
List<StudentModel> Students
List<StudentModel> Students
我应该做以上任何事情,还是做完全不同的事情?我在EF文档中找不到任何好的示例。