我在ViewModel中有以下代码,我想从实体中删除一条记录,但它不起作用。有人可以解释一下......?
Usertable users = new Usertable();
users.User_ID = Entity.User_ID;
users.user_role = "Admin";
Entity.CompanyRoles.Remove(users);
相反,如果我将Remove with Add替换为,则会向实体添加一条记录。
只有移除才是我关注的问题。
答案 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;
}