MVVM从数据库中删除选定的视图模型
本文关键字:视图 模型 删除 数据库 MVVM | 更新日期: 2023-09-27 18:20:51
Im使用mvvm模式。运行要删除此项目的命令时,我可以从项目列表中选择视图模型。
对于这个项目,我有两个存储库(和一个接口)EquipmentRepository和DummyEquipmentReserve,EquipmentStore连接到一个数据库,并有一个方法delte(从接口实现),如:
public void DeleteItem(Equipment obj)
{
var db = new AppContext();
db.Equipment.Remove(obj);
db.SaveChanges();
}
但是,在我的视图模型中,我选择设备视图模型而不是对象,我应该如何传递所选的对象而不是视图模型?
我试图在我的视图模型中运行
myData.DeleteItem(SelectedEquipment);
但这需要一个Equipment对象,而不是EquipmentViewModel
答案简单明了:创建它。
myData.DeleteItem(new Equipment
{
EquipmentId = SelectedEquipment.EquipmentId
});
或扩展您的存储库以按Id 删除
public void DeleteItem(Equipment obj)
{
var db = new AppContext();
db.Equipment.Remove(obj);
db.SaveChanges();
}
public void DeleteItemById(int equipmentId)
{
var equipment = new Equipment
{
EquipmentId = equipmentId
};
// this should really be done in the constructor, as you want to keep the context for the lifetime of your repository, which should encompass a unit of work
var db = new AppContext();
db.Equipment.Attach(equipment);
db.Equipment.Remove(equipment);
db.SaveChanges();
}
编辑:既然你似乎在使用实体框架,那么上面的内容应该是有效的。当然,您可以先通过Id获取对象,然后将其传递给DeleteItem
。
替代方法是
public void DeleteItemById(int equipmentId)
{
var db = new AppContext();
var equipment = db.Equipment.Where( e => e.EquipmentId == equipmentId);
db.Equipment.Remove(equipment);
db.SaveChanges();
}