从实体框架返回更新的项目

时间:2019-11-22 08:55:55

标签: c# entity-framework orm

比方说,我有一个非常简单的对象,该对象显示在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
    }
}

解决此问题的最佳方法是什么?我可以想到三个选择,但是我无法弄清楚这三个选择是否是一个好的解决方案,或者我是否会完全以错误的方式来解决这个问题。

  1. 使ChangeStatus方法返回更新后的实体,因此它变为Task<StudentModel> ChangeStatus()
  2. 刷新List<StudentModel> Students
  3. 中的已修改项目
  4. 刷新整个List<StudentModel> Students

我应该做以上任何事情,还是做完全不同的事情?我在EF文档中找不到任何好的示例。

0 个答案:

没有答案
相关问题