如何仅更新多对多导航属性?
Posted
技术标签:
【中文标题】如何仅更新多对多导航属性?【英文标题】:How to update many to many navigation property only? 【发布时间】:2011-08-15 17:47:13 【问题描述】:我可以更新一些在方法下使用的属性
public void Update(T entity, params Expression<Func<T, object>>[] properties)
_dbSet.Attach(entity);
DbEntityEntry<T> entry = _context.Entry(entity);
foreach (var selector in properties) entry.Property(selector).IsModified = true;
//repo.Update(entity, e => e.Name, e => e.Description);
但是,我只想在多对多关系中更新导航属性 比如 admin 角色 adminrole 我只想更新 adminrole 表
【问题讨论】:
【参考方案1】:如果您只想更新关系,您可以使用简单的技巧。
要在管理员和角色之间添加新关系,您需要执行以下操作:
Admin admin = new Admin Id = adminId ;
context.Admins.Attach(admin);
Role role = new Role Id = roleId ;
context.Roles.Attach(role);
// Create new relation on attached entities
admin.Roles.Add(role);
context.SaveChanges();
要删除管理员和角色之间的现有关系,您可以尝试以下操作:
Admin admin = new Admin Id = adminId ;
Role role = new Role Id = roleId ;
// Simulate existing relation on detached entities
admin.Roles.Add(role);
context.Admins.Attach(admin);
// Remove existing relation on attached entities
admin.Roles.Remove(role);
context.SaveChanges();
在这两种情况下,您只需要知道管理员和角色的密钥。
注意:这适用于真正多对多的场景(联结表仅包含键)。
【讨论】:
SystemAdmin 实体 = base.GetByKey(admin.SAID); DbEntityEntry以上是关于如何仅更新多对多导航属性?的主要内容,如果未能解决你的问题,请参考以下文章