C# 如何在不删除实体的情况下删除EF中多对多表中的记录?
我有两个实体用户和角色C# 如何在不删除实体的情况下删除EF中多对多表中的记录?,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我有两个实体用户和角色 public partial class User { public int Id { get; set; } public string FirstName { get; set; } public string SecondName { get; set; } public virtual ICollection<Role> Roles { get; set; } 问题是如何删除RoleUser表中存在的记录并插入新记录,而不删
public partial class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string SecondName { get; set; }
public virtual ICollection<Role> Roles { get; set; }
问题是如何删除RoleUser表中存在的记录并插入新记录,而不删除实体本身???您需要这样做才能删除多对多表中的记录。让我知道它是否适合你
IObjectContextAdapter contextAdapter = (IObjectContextAdapter)_context;
ObjectStateManager stateManager = contextAdapter.ObjectContext.ObjectStateManager;
stateManager.ChangeRelationshipState(existingParent, existingChild, "Roles", EntityState.Deleted);
_context.SaveChanges();
要添加新值,请执行以下操作:
_context.Entry(existingParent).Collection("Roles").CurrentValue = values;
其中,values
是要添加的数据列表(应该是IEnumerable
或ICollection
,所以list
可以)。
值
必须包含链接到数据库的对象
foreach (Role entry in newValues) {
values.Add(_context.Set(typeof(Role)).Find(entry.Id));
}
您需要这样做才能删除多对多表中的记录。让我知道它是否适合你
IObjectContextAdapter contextAdapter = (IObjectContextAdapter)_context;
ObjectStateManager stateManager = contextAdapter.ObjectContext.ObjectStateManager;
stateManager.ChangeRelationshipState(existingParent, existingChild, "Roles", EntityState.Deleted);
_context.SaveChanges();
要添加新值,请执行以下操作:
_context.Entry(existingParent).Collection("Roles").CurrentValue = values;
其中,values
是要添加的数据列表(应该是IEnumerable
或ICollection
,所以list
可以)。
值
必须包含链接到数据库的对象
foreach (Role entry in newValues) {
values.Add(_context.Set(typeof(Role)).Find(entry.Id));
}
这是删除的代码
_context.Users.find(userId).Roles.Remove(_context.Roles.find(roleId));
_context.SaveChange();
这是add的代码
_context.Users.find(userId).Roles.Add(_context.Roles.find(roleId));
_context.SaveChange();
它将把userid和roleid保存到多对多表中
希望对您有所帮助这是用于删除的代码
_context.Users.find(userId).Roles.Remove(_context.Roles.find(roleId));
_context.SaveChange();
这是add的代码
_context.Users.find(userId).Roles.Add(_context.Roles.find(roleId));
_context.SaveChange();
它将把userid和roleid保存到多对多表中
希望能帮助您检查数据库模型。如果其中一个外键被删除(此处为用户),则联接表(RoleUser)应处于级联删除状态。然后您只需要删除代码中的用户,数据库就会处理RoleUserASP.NET与实体框架完全无关。NET(和MVC)是web框架,EF是ORM。如果您使用ASP.NET术语查找EF答案,您将无法找到您想要的内容检查您的数据库模型。如果其中一个外键被删除(此处为用户),则联接表(RoleUser)应处于级联删除状态。然后您只需要删除代码中的用户,数据库就会处理RoleUserASP.NET与实体框架完全无关。NET(和MVC)是web框架,EF是ORM。如果您使用ASP.NET术语查找EF答案,您将找不到您想要的答案谢谢,这对我来说很好,但是现在我需要添加新行,您能给我一些提示吗?但是这段代码在角色表中插入新记录。情况是角色在我只想在表中插入它之前就存在了(RoleUser).
值
必须包含链接到上下文的角色。例如:\u context.Role.Where(x=>x.Id>5)代码>。我以前做过:values.Add(_context.Set(Role.Find(id))代码>我将添加_context.SaveChanges();在删除旧行之后,再添加新行之后,否则将在结尾处出现一次??在我做上一条评论之前,它对我不起作用非常感谢,它对我很有效,但是现在我需要添加新行,你能给我提示吗?但是这段代码在角色表中插入新记录。情况是,在我只想将其插入表(RoleUser)之前,角色已经存在。值
必须包含链接到上下文的角色。例如:\u context.Role.Where(x=>x.Id>5)代码>。我以前做过:values.Add(_context.Set(Role.Find(id))代码>我将添加_context.SaveChanges();在删除旧行之后,再添加新行之后,否则它将在结尾处出现一次??在我做上一个注释之前,它对我来说不起作用