如何从实体中删除记录-MVVM、WPF

如何从实体中删除记录-MVVM、WPF,wpf,mvvm,Wpf,Mvvm,我在ViewModel中有以下代码,我想从实体中删除一条记录,但它不起作用。有人能帮我弄点光吗 Usertable users = new Usertable(); users.User_ID = Entity.User_ID; users.user_role = "Admin"; Entity.CompanyRoles.Remove(users); 相反,如果我用Add替换Remove,它将向实体添加一条记录 唯一让我担心的是 首先需要获取要删除的实体,然后删除它,然后将更改保存到data

我在ViewModel中有以下代码,我想从实体中删除一条记录,但它不起作用。有人能帮我弄点光吗

Usertable users = new Usertable();
users.User_ID = Entity.User_ID;
users.user_role = "Admin";
Entity.CompanyRoles.Remove(users); 
相反,如果我用Add替换Remove,它将向实体添加一条记录


唯一让我担心的是

首先需要获取要删除的实体,然后删除它,然后将更改保存到datacontext:

var userToRemove = Entity.CompanyRoles.Single(cr => cr.user_role == "Admin");
Entity.CompanyRoles.DeleteObject(userToRemove);
Entity.SaveChanges();

首先,您需要获取要删除的实体,然后删除它,然后将更改保存到datacontext:

var userToRemove = Entity.CompanyRoles.Single(cr => cr.user_role == "Admin");
Entity.CompanyRoles.DeleteObject(userToRemove);
Entity.SaveChanges();

对象是通过引用而不是值进行比较的,因此除非
Entity.CompanyRoles
在内存中包含与要删除的对象完全相同的引用,否则它将无法在集合中找到该对象并将其删除

有两种方法可以解决这个问题

最好的方法是获取对集合中对象的引用,如

或另一种工作方法是覆盖对象的<代码> .RealStor()/Cyto>,如果数据相同,则考虑它们的相等性,而不考虑内存引用。除非在特殊情况下,否则我通常不建议这样做,因为它会影响使用

.Equals()


对象是通过引用而不是值进行比较的,因此除非
Entity.CompanyRoles
在内存中包含与要删除的对象完全相同的引用,否则它将无法在集合中找到该对象并将其删除

有两种方法可以解决这个问题

最好的方法是获取对集合中对象的引用,如

或另一种工作方法是覆盖对象的<代码> .RealStor()/Cyto>,如果数据相同,则考虑它们的相等性,而不考虑内存引用。除非在特殊情况下,否则我通常不建议这样做,因为它会影响使用

.Equals()


别忘了,根据EF版本,他还必须更改ObjectState。别忘了,根据EF版本,他还必须更改ObjectState。谢谢Rachel…你的第一个方法成功了…但最后出现了一个错误…我在实体上的foreach循环中有这段代码…每次我从它…它遇到以下错误…集合已修改枚举操作可能无法执行。实体framework@siddu在循环遍历集合时不能修改集合,因此通常我循环遍历要删除的项并从集合中删除每个项,而不是循环遍历集合并查找要删除的项。通常这需要创建一个临时集合来保存要删除的项。谢谢Rachel…您的第一个方法工作了…但最终出现了一个错误…我在实体上的foreach循环中有此代码…每次我从其中删除记录时…它会出现以下错误…集合已修改枚举操作可能不会执行。实体framework@siddu在循环遍历集合时不能修改集合,因此通常我循环遍历要删除的项并从集合中删除每个项,而不是循环遍历集合并查找要删除的项。这通常需要创建一个临时集合来保存要删除的项。
public override bool Equals(object obj)
{
    if (obj == null || !(obj == MyClass))
        return false; 

    var obj2 = obj as MyClass;

    return obj2.user_role == this.user_role && obj2.User_ID == this.User_ID;
}