[英]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.