IdentityDbContext左右似乎有很多困惑.

如果我们在应用程序中创建两个数据库上下文,一个用于标识,另一个用于自定义业务数据,则标识数据库上下文从IdentityDbContext继承,而自定义业务数据从DbContext继承.

因此,让我们将以下内容添加到控制器中:

private MyDbContext db = new MyDbContext();
private ApplicationDbContext identityDb = new ApplicationDbContext();

以下是控制器中的索引方法:

var thingsInMyBusinessDb = db.Things.ToList();
var usersInIndentityDb = identityDb.AspNetUsers.ToList(); // THIS WILL HAVE AN ERROR
var roles = identityDb.AspNetRoles.ToList(); // ERROR

您还将注意到,标识数据库中的表不可用.Why is this?

目前,从2.0.0-beta1开始,有一个用户和角色项,但我希望实际的表是可用的.And why not?如果我想进入AspNetUserRoles呢

当然,如果在实体框架中像对待任何数据库上下文一样对待念力,那么很多关于ASP.NET标识的念力和问题就会消失得无影无踪.

推荐答案

ApplicationDbContextUsersRoles属性映射到AspNetUsersAspNetRoles表,其余实体(ClaimsLoginsUserRoles)通过导航属性自动映射.据我所知,表名的前缀为"AspNet"是ApplicationDbContext中唯一的自定义映射,其他一切都只是实体框架代码优先约定.

如果你需要通过ApplicationDbContext直接访问表格,你可以这样做...

using (var context = new ApplicationDbContext())
{
    var users = context.Users.Include(u => u.Claims)
                             .Include(u => u.Logins)
                             .Include(u => u.Roles)
                             .ToList();

    var roles = context.Roles.ToList();
}

您可以通过IdentityUser实体(从UsersDbSet)上的导航属性访问用户的角色、声明和登录.如果您想要直接查询它们,请将它们显式添加为上下文中的DbSet.

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

    public DbSet<IdentityUserRole> UserRoles { get; set; }
    public DbSet<IdentityUserClaim> Claims { get; set; }
    public DbSet<IdentityUserLogin> Logins { get; set; }

}

然后像这样询问他们...

var claims = context.Claims.ToList();
var userRoles = context.UserRoles.ToList();
var logins = context.Logins.ToList();

ASP.为了方便起见,NET Identity 2.0在Manager类上公开了UsersRoles IQueryables,但它没有提供任何比DbContext可用的功能更多的功能.

Asp.net相关问答推荐

如何格式化搜索字符串以从 Razor 页表中的多个列返回部分搜索字符串?

使用 Asp.Net MVC 和 KnockoutJS 处理日期

如何在 ASP.NET WebForms 中实现 TDD

有条件地在 Gridview 中隐藏 CommandField 或 ButtonField

如何在 ASP.NET 中使用时区?

如果站点在 localhost 或 127.0.0.1 上运行,如何判断 ASP.NET MVC 视图

将 null 转换为字符串的函数

如何从 web.config 中读取系统值并在 ASP.NET MVC C# 方法中使用

如何在集线器类之外获取 SignalR 用户连接 ID?

如何从 RouteData 获取路由名称?

在asp.net mvc c#中使用cookie

问题映射 HttpHandler --> HTTP Error 404 Not Found

更改后未应用 CSS

MVC5 身份验证中的......与主域之间的信任关系失败

如何在 ASP.NET MVC 中启用跨源请求

ASP.NET MVC 2.0 JsonRequestBehavior 全局设置

如何保护存储在 web.config 中的密码?

脚本管理器控制实际上是做什么的?

我可以在加载事件时从 C# 的 div 标记中动态添加 HTML 吗?

无法使用 ip:port 访问 WEB API,但可以在 VS 调试模式下使用 localhost:port