簡體   English   中英

MVVM從數據庫中刪除選定的視圖模型

[英]MVVM delete selected viewmodel from database

我正在使用mvvm模式。 運行命令時,我可以從項目列表中選擇一個視圖模型,我想刪除該項目。

對於這個項目,我有兩個存儲庫(和一個接口)EquipmentRepository和DummyEquipmentRepository,EquipmentRepository連接到數據庫,並且有一個方法delte(從接口實現),例如:

    public void DeleteItem(Equipment obj)
    {
        var db = new AppContext();
        db.Equipment.Remove(obj);
        db.SaveChanges();
    }

但是,在我的視圖模型中,我選擇equipmentViewModels而不是對象,應如何傳遞所選的對象而不是視圖模型?

我試圖在我的視圖模型中運行

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

編輯:由於您似乎正在使用Entity Framework,因此上述方法應能正常工作。 當然,您可以先通過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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM