1

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

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

相反,如果我用添加替换删除,它将向实体添加一条记录。

只有删除对我来说是一个问题。

4

2 回答 2

1

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

var userToRemove = Entity.CompanyRoles.Single(cr => cr.user_role == "Admin");
Entity.CompanyRoles.DeleteObject(userToRemove);
Entity.SaveChanges();
于 2012-10-01T16:07:54.947 回答
0

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

有两种方法可以修复它。

最好的方法是像Paul 建议的那样获取对集合中对象的引用

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;
}
于 2012-10-01T19:02:12.600 回答