我在我的种子方法中使用 AddOrUpdate 来保持我的权限是最新的,但是,在下面的代码更新现有角色(而不是创建它)的情况下,我创建的任何新权限都不会被添加到角色中。我究竟做错了什么?

foreach (KeyValuePair<string, string[]> s in new Dictionary<string, string[]>{
                {"Superuser", context.Permissions.Select<Permission, string>(p=>p.Name).ToArray()},

            })
            {
                Role r = new Role();
                r.Name = s.Key;
                r.Permissions = new List<Permission>();
                foreach (string p in s.Value)
                    r.Permissions.Add(context.Permissions.Where(per => per.Name == p).First());

                context.Roles.AddOrUpdate(i => i.Name, r);
            }

context.SaveChanges();

最佳答案

AddOrUpdate 只添加或更新主实体,而不是它的关系。

所以你必须分两步完成:

  • 创建 Role ,并对其进行 AddOrUpdate 。现在,您可以从添加或更新的 RoleId 中获取 Role(或任何 PK)。
  • 创建 Permissions ,并明确设置它们的 RoleId (或任何 FK 是什么)。然后 AddOrUpdate Permissions
  • 关于c# - AddOrUpdate 不修改子项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23067806/

    10-11 02:07