2016-03-30 11 views
0

Ich füge 3 Rollen zur Datenbank. "Admin", "Moderator" und . Ich möchte einfach "Admin" zu "Administrator" umbenennen. Ich benutze diesen Code, aber es ist nicht korrekt. Der Rückgabewert ist {"Datenbankoperation wird voraussichtlich 1 Zeile betreffen, betrifft aber 0 Zeile (n). Daten wurden möglicherweise geändert oder gelöscht, seit Entitäten geladen wurden. Informationen zum Verständnis und zur Behandlung optimistischer Nebenläufigkeitsausnahmen finden Sie unter http://go.microsoft.com/fwlink/?LinkId=527962. „}Wie ASP.NET Identität Rolle umbenennen

Edit.cshtml

@model Microsoft.AspNet.Identity.EntityFramework.IdentityRole 
    @using (Html.BeginForm()) 
    { 
     @Html.AntiForgeryToken() 
     @Html.ValidationSummary(true) 
     @Html.HiddenFor(model => model.Id) 
     <div> 
      Role name 
     </div> 
     <p> 
      @Html.TextBoxFor(model => model.Name) 
     </p> 
     <input type="submit" value="Save" /> 
    } 

RoleController

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit(IdentityRole role) //IdentityRole role 
    { 
     try 
     { 

      context.Entry(role).State = EntityState.Modified; 
      context.SaveChanges(); 

      return RedirectToAction("Index"); 
     } 
     catch (Exception ex) 
     { 
      return View(); 
     } 
    } 

Antwort

3

Verwenden Sie den Role Manager von Identität zur Verfügung gestellt.

In Startup.Auth, stellen Sie sicher, dass das Rolemanager wie folgt verwiesen wird:

public void ConfigureAuth(IAppBuilder app) 
{ 
    // Add this reference 
    app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create); 
} 

Stellen Sie sicher, der Controller diesen Konstruktor umfasst:

private ApplicationRoleManager _roleManager; 
public ApplicationRoleManager RoleManager { get { return _roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>(); } private set { _roleManager = value; } } 

Dann können Sie diese anstelle des Codes verwenden die Frage (async gegeben):

[HttpPost] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Edit(IdentityRole role) 
{ 
    try 
    { 
     IdentityRole thisRole = await RoleManager.FindByIdAsync(role.Id); 
     thisRole.Name = role.Name; 
     await RoleManager.UpdateAsync(thisRole); 
     return RedirectToAction("Index"); 
    } 
    catch (Exception ex) 
    { 
     return View(); 
    } 
} 

Und schließlich stellen Sie sicher, dass Sie die entsorgen Role Manager wie folgt:

protected override void Dispose(bool disposing) 
{ 
    if (disposing && RoleManager != null) 
    { 
     RoleManager.Dispose(); 
     RoleManager = null; 
    } 
    if (disposing) 
    { 
     context.Dispose(); 
    } 
    base.Dispose(disposing); 
} 

Hoffentlich sollte dies den Trick tun.

+0

Ich brauche eine Lösung für Identity 3.0 – user1088259

+0

OK, aber die Frage hat nicht gesagt, und Identität 3 ist immer noch in der Vorabversion. Dies ist für Identität und Identität 2. – RickL

Verwandte Themen