Sto usando AddOrUpdate nel mio metodo seed per mantenere aggiornate le mie autorizzazioni, tuttavia, nella situazione in cui il codice seguente sta aggiornando il ruolo esistente (anziché crearlo), le nuove autorizzazioni che ho creato non vengono aggiunte al ruolo. Che cosa sto facendo di sbagliato?
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
aggiunge o aggiorna solo l'entità principale, ma non le sue relazioni.
Quindi devi farlo in due passaggi:
Role
e AddOrUpdate
. Ora puoi ottenere il RoleId
(o qualunque sia il PK) dal tuo Role
aggiunto o aggiornato. Permissions
e imposta in modo esplicito il loro RoleId
(o qualunque sia l'FK). Quindi AddOrUpdate
le Permissions
.