使用DataAccessService MVVM Light更新数据库

本文关键字:更新 数据库 Light MVVM DataAccessService 使用 | 更新日期: 2023-09-27 18:10:18

这已经困扰了我一段时间了,我想做的是通过更改ObservableCollection或记录类SquirrelDataGridActiveView来更新数据库上的现有记录。
这是我的DataAccessService:

public interface IDataAccessService
{
    ObservableCollection<SquirrelDataGridActiveView> GetEmployees();
    void UpdateRecord(SquirrelDataGridActiveView Emp);
    int CreateEmployee(SquirrelDataGridActiveView Emp);
}
/// <summary>
/// Class implementing IDataAccessService interface and implementing
/// its methods by making call to the Entities using CompanyEntities object
/// </summary>
public class DataAccessService : IDataAccessService
{
    Drive_SHEntities context;
    public DataAccessService()
    {
        context = new Drive_SHEntities();
    }
    public ObservableCollection<SquirrelDataGridActiveView> GetEmployees()
    {
        ObservableCollection<SquirrelDataGridActiveView> Employees = new ObservableCollection<SquirrelDataGridActiveView>();
        foreach (var item in context.SquirrelDataGridActiveViews)
        {
            Employees.Add(item);
        }
        return Employees;
    }
    public int CreateEmployee(SquirrelDataGridActiveView Emp)
    {
        context.SquirrelDataGridActiveViews.Add(Emp);
        context.SaveChanges();
        return Emp.ID;
    }
    public void UpdateRecord(SquirrelDataGridActiveView temp)
    {
    }
}

正如你所看到的,已经有一个GetEmployees()方法和一个CreateEmployee()方法,但是我发现用新值更新数据库非常困难。

使用DataAccessService MVVM Light更新数据库

看起来问题可能在你的EF层。您是否有任何单元测试来检查新Employee记录的创建是否正常工作?你能闯入CreateEmployee并检查empty . id字段吗?看看它是否设置了什么。如果是,则新记录的创建工作正常。请允许我说一句:您的数据访问服务不需要返回ObservableCollection。我假设在视图模型类中已经有一个可观察集合。如果您希望保持视图中的数据网格与视图模型类中的可观察集合属性之间的绑定,则不应该重新分配视图模型类的OC属性。您应该遵循的模式如下:

  • 从数据访问服务的getememployees()方法返回IEnumeration;
  • 可选,但建议将getememployees设置为可等待的;
  • 在视图模型类中,清除OC属性的内容,然后一个接一个地添加由GetEmployees()方法返回的IEnumeration集合中的所有项。这样绑定将继续工作,数据库中的任何更新将反映在视图的数据网格中。

您可以保留GetEmployees的OC返回值,但是在视图模型中,您仍然需要将所有项一个接一个地传输到最有可能绑定到视图中的数据网格的属性中。如果你只是把GetEmployees()返回的OC列表赋值给视图模型的属性,你的绑定就会消失。

也许你的数据网格没有正确刷新,这就是为什么你得出结论,数据库没有更新,而实际上它是。

HTH,埃迪