【问题标题】:Update Many to Many Entity Framework. Cannot remove from many to many table更新多对多实体框架。无法从多对多表中删除
【发布时间】:2015-09-05 20:55:14
【问题描述】:

用户和角色之间存在多对多关系。我可以轻松地将角色添加到多对多表中,但我无法删除它,它不会给我任何错误,但不会删除要删除的角色。我尝试了我发现的一切。这是我的代码。

public User Update(User entity)
    {
        using (var context = new EnerSysEntities())
        {

            var user = context.Users.Single(u => u.USER_ID == entity.USER_ID);

            //All roles in the data base
            List<Role> roleAlreadyAssigned = GetById(entity.USER_ID).Roles.ToList();

            //Roles to remove
            List<Role> rolesToRemove =
                roleAlreadyAssigned.Where(x => entity.Roles.All(y => y.ROLE_ID != x.ROLE_ID)).ToList();

            //Roles to add
            List<Role> rolesToAdd =
                entity.Roles.Where(x => roleAlreadyAssigned.All(y => y.ROLE_ID != x.ROLE_ID)).ToList();


            foreach (Role roleToDelete in rolesToRemove.ToList())
            {
                // Remove the roles from rolesToRemove
                user.Roles.Remove(roleToDelete);

            }

            //Add the roles which are not in the list of rolesToAdd
            foreach (Role rol in rolesToAdd)
            {
                var newRole = new Role { ROLE_ID = rol.ROLE_ID };
                context.Roles.Attach(newRole);
                user.Roles.Add(newRole);

            }

            context.SaveChanges();
            return entity;
        }
    }

我错过了什么?

【问题讨论】:

  • 你在 user.Roles 中使用了lazyLoading 吗?或者在调用 var user = context.Users.Single(u =&gt; u.USER_ID == entity.USER_ID); 后这是空的
  • 你为什么又让用户使用GetById(entity.USER_ID)?尝试从用户对象var user = context.Users.Single(u =&gt; u.USER_ID == entity.USER_ID);获取角色
  • 是的,我会的

标签: c# .net entity-framework linq-to-entities


【解决方案1】:

要从 Entity 中删除实体,必须先在您的 Entity 中加载此实体。

试试

var user = context.Users.Include(u => u.Roles).Where(u => u.USER_ID == entity.USER_ID).FirstOrDefault;

List<Role> rolesToRemove =
    user.Roles.Where(x => entity.Roles.All(y => y.ROLE_ID != x.ROLE_ID)).ToList();

//Roles to add
List<Role> rolesToAdd =
    entity.Roles.Where(x => user.Roles.All(y => y.ROLE_ID != x.ROLE_ID)).ToList();

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 2023-04-11
    相关资源
    最近更新 更多