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集合中的所有项。这样,绑定将继续工作,数据库中的任何更新都将反映在视图的数据网格中
埃迪对不起,也许我不够清楚;忽略
CreateEmployee()
。我想运行更新SQL查询,需要将其放入UpdateRecord()
中。不过,我需要一种比运行SQL查询更通用的方法来更新数据库。我想它将涉及上下文。