2016-03-30 5 views
0

Я добавляю 3 роли в базу данных. "Admin", "Moderator" и . Я хочу просто переименовать "Admin" в "Administrator". Я использую этот код, но его неправильная работа. Его возвратите мне ошибку {«Операция базы данных предположительно повлияет на 1 строку (строки), но на самом деле затронула 0 строк. Данные могут быть изменены или удалены с момента загрузки объектов. См. http://go.microsoft.com/fwlink/?LinkId=527962 для получения информации о понимании и обработке оптимистичных исключений параллелизма. «}Как переименовать роль Identity Asp.net

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

ответ

3

Использование Роль менеджера обеспечивается идентичность.

В Startup.Auth, убедитесь, что RoleManager ссылаются как это:

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

Убедитесь, что контроллер включает в себя этот конструктор:

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

Затем вы можете использовать это вместо кода вопрос (данный как асинхронный):

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

И, наконец, убедитесь, что вы выбрали Роль менеджера:

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

Надеюсь, это должно сделать трюк.

+0

Мне нужно решение для Identity 3.0 – user1088259

+0

ОК, но вопрос не сказал, что и Identity 3 все еще в предварительном выпуске. Это для Identity и Identity 2. – RickL

 Смежные вопросы

  • Нет связанных вопросов^_^