我在 ViewModel 中有以下代码,我想从实体中删除记录,但它不起作用。有人可以解释一下吗...?
Usertable users = new Usertable();
users.User_ID = Entity.User_ID;
users.user_role = "Admin";
Entity.CompanyRoles.Remove(users);
相反,如果我用添加替换删除,它将向实体添加一条记录。
只有删除对我来说是一个问题。
首先,您需要获取要删除的实体,然后将其删除,然后将更改保存到 datacontext:
var userToRemove = Entity.CompanyRoles.Single(cr => cr.user_role == "Admin");
Entity.CompanyRoles.DeleteObject(userToRemove);
Entity.SaveChanges();
对象是通过引用而不是值进行比较的,因此除非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;
}