使用DataAccessService MVVM Light更新数据库
问题描述:
现在我一直在窃听我一段时间,我希望能够通过更改ObservableCollection
或记录类SquirrelDataGridActiveView
来更新数据库上的现有记录。
这是我DataAccessService:使用DataAccessService MVVM Light更新数据库
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()
方法但是我finiding很难用新值更新数据库。
任何建议将不胜感激。
答
看起来问题可能出在你的EF层。你有任何单元测试来检查新员工记录的创建是否正常工作?你可以闯入CreateEmployee并检查Emp.ID字段吗?看看它是否设置了某些东西。如果是这样,新记录的创建工作正常。一个观察,如果我可以:你的数据访问服务不需要返回一个ObservableCollection。我假设你已经在你的视图模型类中有一个可观察的集合。如果要保持视图中数据网格与视图模型类中可观察集合属性之间的绑定,则不应重新分配视图模型类的OC属性。你应该遵循的模式是这样的:
- 从你的数据访问服务的GetEmployees()方法返回一个IEnumeration;
- 可选,但建议使GetEmployees等待;
- 在您的视图模型类中,清除OC属性的内容,然后逐个添加由您的GetEmployees()方法返回的IEnumeration集合中的所有项目。这样你的绑定将继续工作,数据库中的任何更新都将反映在视图的数据网格中。
您可以保持OC从您的GetEmployees返回,但在您的视图模型中,您仍然需要将所有项目逐一转移到最有可能绑定到数据网格的属性中风景。如果您只将GetEmployees()返回的OC列表分配给视图模型的属性,您的绑定将会消失。
也许你的数据网格不能正确刷新,这就是为什么你认为数据库实际上没有更新的原因。
HTH, 埃迪
对不起,也许我还不够清楚;忽略'CreateEmployee()'。我想运行一个UPDATE SQL查询,这需要放在'UpdateRecord()'里面。我需要一个更通用的方式来更新数据库,而不是运行SQL查询。我想它会涉及'Context'。 –