Identity ASP.NET - IdentityDBContext вызывает проблемы для полей, добавленных в таблицу Aspnetroles

StackOverflow https://stackoverflow.com//questions/22051140

Вопрос

identitydbcontext, вызывая проблемы для свойств / полей, добавленных в аспектреолы

Я считаю, что проблема здесь с идентификаторомDBContext, принимая тип идентификатора:

public class MyIdentityDb : IdentityDbContext<ApplicationUser>
{
    public IdentityDb()
        : base("IdentityDb")
    {
    }
}
.

Но позвольте мне объяснить ...

Прекрасно, что мы можем добавлять поля в таблицу ASPTESUSERS, добавив свойства на наш класс приложения, который наследует от идентификатора. Пример:

public class ApplicationUser : IdentityUser
    {
        [Required]
        [StringLength(50)]
        public string FirstName { get; set; }

        [Required]
        [StringLength(50)]
        public string LastName { get; set; }
    }
.

Так что натурально мы можем добавлять поля в таблицу Aspnetroles, добавляя свойства в класс Applicationrole, который наследует от идентификатора. Пример:

public class ApplicationRole : IdentityRole
{
    [Required]
    [StringLength(50)]
    public string ProperName { get; set; }
}
.

работает идеально. Мы можем увидеть поле в базе данных. Мы можем добавить данные к нему. Пример:

RoleManager<ApplicationRole> roleManager = new RoleManager<ApplicationRole>(new RoleStore<ApplicationRole>(new MyIdentityDb()));

var role = new ApplicationRole() { Name = name, ProperName = propername };
var result = await roleManager.CreateAsync(role);
.

Но теперь мы столкнулись с проблемой при попытке добраться до данных. Пример:

Наш ViewModel:

public class IndexViewModel
{
    public IList<ApplicationUser> Users { get; set; }
    public IList<ApplicationRole> Roles { get; set; }
}
.

на нашем контроллере:

private MyIdentityDb myIdentityDb = new MyIdentityDb();
.

Наш метод индекса на нашем контроллере:

public ViewResult Index(int? page)
{
     return View(new IndexViewModel
     {
          Users = myIdentityDb.Users.ToList(),
          Roles = myIdentityDb.Roles.ToList()
     });
}
.

ошибка включена на "my indoletitydb.rolose.tolist ()" и чтение "не может неясно преобразовать тип System.Collection.Generic.List<Microsoft.AspNet.Identity.EntityFramework.IdentityRole> to System.Collections.Generic.IList<MyApp.Models.ApplicationRole> ...

Конечно, мы могли бы изменить наш ViewModel, чтобы использовать тип идентификатора типа, как следующий пример, но тогда мы не можем добраться до нового поля «Opername» в таблице Aspnetroles:

public class IndexViewModel
{
    public IList<ApplicationUser> Users { get; set; }
    public IList<IdentityRole> Roles { get; set; }
}
.

Итак, мы могли бы попробовать создать другой класс БД и передавать его идентификаторным типом вместо идентификатора:

public class MyIdentityDb : IdentityDbContext<ApplicationUser>
{
    public MyIdentityDb()
        : base("MyIdentityDb")
    {
    }
}

public class MyIdentityRolesDb : IdentityDbContext<ApplicationRole>
{
    public MyIdentityRolesDb()
        : base("MyIdentityDb")
    {
    }
}
.

и изменить наш контроллер:

private MyIdentityDb myIdentityDb = new MyIdentityDb();
private MyIdentityRolesDb myIdentityRolesDb = new MyIdentityRolesDb();
.

и изменить наш метод индекса на нашем контроллере:

public ViewResult Index(int? page)
{
     return View(new IndexViewModel
     {
          Users = myIdentityDb.Users.ToList(),
          Roles = myIdentityRolesDb.Roles.ToList()
     });
}
.

Но мы в конечном итоге с той же проблемой; Тот факт, что идентификаторDBContext принимает тип идентификатора.

Любые идеи, как мы можем получить список ролей с пользовательскими полями / свойствами?

Это было полезно?

Решение

Так что, если вы обновляете до бета-пакетов 2.0.0, вы должны быть в состоянии получить IQueryable ApplicationRole непосредственно из руководителя роли:

roleManager.Roles
.

Так что вам не нужно выпадать в контекст БД, это было ограничение в 1.0, которое было зафиксировано в выпуске 2.0.

Другие советы

Пожалуйста, посмотрите на следующую статью, которая подробно объясняет, что вы пытаетесь сделать http://typecastexception.com/post/2014/02/13/aspnet-mvc-5-identity-extended-and-modifying-roles.aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top