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

MVVM从数据库中删除选定的视图模型

答案简单明了:创建它。

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();
}