Идентификация Asp.Net - IdentityDbContext <TUser> вызывающие проблемы для полей, добавленных в таблицу AspNetRoles

asp.net-identity asp.net-mvc-5 c# entity-framework-6

Вопрос

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

Я считаю, что проблема здесь заключается в том, что IdentityDbContext использует тип IdentityUser:

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

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

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

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

Естественно, мы можем добавлять поля в таблицу AspNetRoles, добавляя свойства к классу ApplicationRole, который наследуется от IdentityRole. Пример:

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

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

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

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

Наш ViewModel:

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

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

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

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

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

Ошибка указана в «MIIdentityDb.Roles.ToList ()» и читает «Невозможно преобразовать тип System.Collection.Generic.List<Microsoft.AspNet.Identity.EntityFramework.IdentityRole> to System.Collections.Generic.IList<MyApp.Models.ApplicationRole> â € |

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

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

Поэтому мы могли бы попробовать создать еще один класс Db и передать ему тип IdentityRole вместо IdentityUser:

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

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

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

И измените наш метод Index на нашем контроллере:

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

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

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

Принятый ответ

Поэтому, если вы переходите на бета-версии 2.0.0, вы можете получить IQueryable из ApplicationRole непосредственно из диспетчера ролей:

roleManager.Roles

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


Популярные ответы

Пожалуйста, взгляните на следующую статью, в которой подробно объясняется, что вы пытаетесь сделать http://typecastexception.com/post/2014/02/13/ASPNET-MVC-5-Identity-Extending-and-Modifying-Roles. ASPX




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему