Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用DataAccessService MVVM灯更新数据库_C#_Wpf_Mvvm - Fatal编程技术网

C# 使用DataAccessService MVVM灯更新数据库

C# 使用DataAccessService MVVM灯更新数据库,c#,wpf,mvvm,C#,Wpf,Mvvm,这已经困扰了我一段时间了,我希望能够通过更改observeCollection或record类SquirrelDataGridActiveView来更新数据库中的现有记录 这是我的DataAccessService: public interface IDataAccessService { ObservableCollection<SquirrelDataGridActiveView> GetEmployees(); void UpdateRecord(Squirr

这已经困扰了我一段时间了,我希望能够通过更改
observeCollection
或record类
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)
    {

    }
}
公共接口IDataAccessService
{
ObservableCollection GetEmployees();
无效更新记录(SquirrelDataGridActiveView Emp);
int CreateEmployee(SquirrelDataGridActiveView Emp);
}
/// 
///类实现IDataAccessService接口并实现
///它的方法是使用CompanyEntities对象调用实体
/// 
公共类DataAccessService:IDataAccessService
{
驱动环境;
公共数据访问服务()
{
上下文=新的驱动程序_shenties();
}
公共可观测集合GetEmployees()
{
ObservableCollection Employees=新的ObservableCollection();
foreach(context.squirrelDataGridActiveView中的变量项)
{
员工。添加(项目);
}
返回员工;
}
public int CreateEmployee(SquirrelDataGridActiveView Emp)
{
SquirrelDataGridActiveViews.Add(Emp);
SaveChanges();
返回Emp.ID;
}
公共无效更新记录(SquirrelDataGridActiveView临时)
{
}
}
正如您所看到的,已经有了一个
GetEmployees()
方法和一个
createemployees()
方法,但是我发现用新值更新数据库非常困难


任何建议都将不胜感激。

看来问题可能出在您的EF层。您是否有任何单元测试来检查新员工记录的创建是否正常工作?你能进入CreateEmployee并检查Emp.ID字段吗?看看是不是设定了什么。如果是,则新记录的创建工作正常。一个观察结果,如果可以的话:您的数据访问服务不需要返回ObservableCollection。我假设您的视图模型类中已经有一个可观察的集合。如果希望保持视图中的数据网格与视图模型类中的observable collection属性之间的绑定处于活动状态,则不应重新分配视图模型类的OC属性。您应该遵循以下模式:

  • 从数据访问服务的GetEmployees()方法返回IEnumeration
  • 可选,但建议让GetEmployees成为可等待的
  • 在视图模型类中,清除OC属性的内容,然后逐个添加GetEmployees()方法返回的IEnumeration集合中的所有项。这样,绑定将继续工作,数据库中的任何更新都将反映在视图的数据网格中
您可以保留GetEmployees返回的OC,但在视图模型中,您仍然需要将所有项逐个传输到属性中,该属性很可能绑定到视图中的数据网格。如果只将GetEmployees()返回的OC列表分配给视图模型的属性,则绑定将消失

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

嗯,,
埃迪

对不起,也许我不够清楚;忽略
CreateEmployee()
。我想运行更新SQL查询,需要将其放入
UpdateRecord()
中。不过,我需要一种比运行SQL查询更通用的方法来更新数据库。我想它将涉及
上下文