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

时间:2012-10-01 16:02:48

标签: wpf mvvm

我在ViewModel中有以下代码,我想从实体中删除一条记录,但它不起作用。有人可以解释一下......?

Usertable users = new Usertable();
users.User_ID = Entity.User_ID;
users.user_role = "Admin";
Entity.CompanyRoles.Remove(users); 

相反,如果我将Remove with Add替换为,则会向实体添加一条记录。

只有移除才是我关注的问题。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

通过引用而不是值来比较对象,因此除非Entity.CompanyRoles在内存中包含您要删除的对象的确切引用,否则它将无法在集合中找到该对象并将其删除。 / p>

有两种方法可以修复它。

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

var userToRemove = Entity.CompanyRoles.Single(cr => 
    cr.user_role == "Admin" && cr.User_ID = Entity.User_ID);

Entity.CompanyRoles.Remove(userToRemove);

或者另一种有效的方法是覆盖对象的.Equals(),以便在数据相同时将它们视为相等,而不管内存引用如何。除非在特殊情况下,否则我通常不建议这样做,因为它会影响使用.Equals()

将此对象的一个​​副本与另一个副本进行比较的任何操作
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;
}