如何仅更新多个导航属性?

时间:2011-08-15 17:47:14

标签: asp.net-mvc entity-framework-4.1

我可以在方法

下更新一些属性
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 role adminrole 这样我只想更新adminrole表

1 个答案:

答案 0 :(得分:0)

如果您想更新关系,可以使用简单的技巧。

要在管理员和角色之间添加新关系,您需要执行以下操作:

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();

在这两种情况下,您只需要知道管理员和角色的密钥。

注意:这适用于您具有真正的多对多(具有仅包含键的联结表)的情况。