AddToRole 和 IdentityRole 不是当前上下文模型的一部分

2023-11-30

我正在使用 Identity 2.1 来处理我的 asp.net 应用程序中的用户角色。到目前为止,一切顺利,我创建了从 IdentityDBContext 扩展的新上下文,扩展了 IdentityUser 和 IdentityRole 以添加几个新字段。但是,每当我尝试使用 UserManager 将用户添加到特定角色时,我就会得到The entity type IdentityRole is not part of the model for the current context.。所以用户角色关系似乎有问题,这是我到目前为止的代码供参考:

User

public class User : IdentityUser{

    public string Name { get; set; }
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<User> manager, string authenticationType) {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, authenticationType);
        // Add custom user claims here
        return userIdentity;
    }
}

Role

public partial class Role : IdentityRole
{
    public string Description { get; set; }
}

数据库上下文

namespace Carbon.Models {

    public partial class CarbonEDM :  IdentityDbContext<User, Role, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>{
        public CarbonEDM()
            : base("name=CarbonDB") {
        }

        public static CarbonEDM Create() {
            return new CarbonEDM();
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder) {

            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<User>().ToTable("Users", "dbo");
            modelBuilder.Entity<Role>().ToTable("Roles", "dbo");
            modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles", "dbo");
            modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims", "dbo");
            modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins", "dbo");
        }
    }
}

应用程序用户管理器

public class ApplicationUserManager : UserManager<User>
{
    public ApplicationUserManager(IUserStore<User> store)
        : base(store)
    {
    }

    public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
    {

        var manager = new ApplicationUserManager(new UserStore<User>(context.Get<CarbonEDM>()));
        // Configure validation logic for usernames
        manager.UserValidator = new UserValidator<User>(manager)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };

        // Configure validation logic for passwords
        manager.PasswordValidator = new PasswordValidator
        {
            RequiredLength = 6,
            RequireNonLetterOrDigit = false,
            RequireDigit = false,
            RequireLowercase = false,
            RequireUppercase = false,
        };

        // Configure user lockout defaults
        manager.UserLockoutEnabledByDefault = true;
        manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);
        manager.MaxFailedAccessAttemptsBeforeLockout = 5;

        var dataProtectionProvider = options.DataProtectionProvider;
        if (dataProtectionProvider != null)
        {
            manager.UserTokenProvider = 
                new DataProtectorTokenProvider<User>(dataProtectionProvider.Create("ASP.NET Identity"));
        }
        return manager;
    }
}

最后,每当我在迁移中播种时都会出现错误:

    protected override void Seed(Carbon.Models.CarbonEDM context)
    {

        DbContextTransaction transaction = null;
        transaction = context.Database.BeginTransaction();

        if (!context.Roles.Any()) {
            var roleStore = new RoleStore<Role>(context);
            var roleManager = new RoleManager<Role>(roleStore);

            roleManager.Create(new Role { Name = "Admin" });
            roleManager.Create(new Role { Name = "Control Unit Operator" });
            roleManager.Create(new Role { Name = "Lab Operator" });
            roleManager.Create(new Role { Name = "Production Engineer" });
            roleManager.Create(new Role { Name = "Production Operator" });
        }

        if (!context.Users.Any()) {
            var userStore = new UserStore<User>(context);
            var userManager = new ApplicationUserManager(userStore);

            var _user = new User {
                Email = "yehiasalam@live.com",
                PhoneNumber = "+20 12 23461340",
                Name = "Yehia A.Salam",
                UserName = "[email protected]"
            };
            userManager.Create(_user, "pass@word");
            userManager.AddToRole(_user.Id, "Admin"); /* IdentityRole error here */

        }

        context.SaveChanges();
        transaction.Commit();


        base.Seed(context);
    }
}

很抱歉这篇文章很长,我试图包含所有内容。


好的,问题出在 UserStore 上,默认声明是

public class UserStore<TUser> : UserStore<TUser, IdentityRole, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>, IUserStore<TUser>, IUserStore<TUser, string>, IDisposable where TUser : Microsoft.AspNet.Identity.EntityFramework.IdentityUser {

其中显式声明了 IdentityRole,而不是使用像 TUser 这样的通用符号,因此我们只需要创建另一个从父 UserStore 扩展的类:

public class CarbonUserStore<TUser> : UserStore<TUser, Role, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>, IUserStore<TUser>, IUserStore<TUser, string>, IDisposable where TUser : Microsoft.AspNet.Identity.EntityFramework.IdentityUser {

    public CarbonUserStore(DbContext context) :base(context) {}     }

微软不酷,我花了一天时间试图弄清楚它等等。但是,它已添加到随 vNext 一起提供的 Identity 包中(一定喜欢它是开源的):https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNet.Identity.EntityFramework/UserStore.cs

public class UserStore<TUser, TRole, TContext> : UserStore<TUser, TRole, TContext, string>
    where TUser : IdentityUser, new()
    where TRole : IdentityRole, new()
    where TContext : DbContext
{
    public UserStore(TContext context, IdentityErrorDescriber describer = null) : base(context, describer) { }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AddToRole 和 IdentityRole 不是当前上下文模型的一部分 的相关文章

  • 如何在您的网站中连接两个人

    有一款名为 Verbosity 的游戏 这是一款有目的的游戏 位于此链接上www gwap com 在游戏中 他们随机连接两个玩家互相玩 游戏是玩家1应该向他的搭档 玩家2 描述一个单词 而玩家2应该猜测这个单词 我正在尝试建立一个网站来执
  • .Net MVC 4 项目失败,并出现事件日志错误“模块 DLL C:\WINDOWS\system32\inetsrv\aspnetcore.dll 无法加载。数据是错误。”

    这不是 DotNetCore 项目 它是 MVC 4 项目 并且应用程序池已正确配置为使用 dotnet CLR v4 但在更新到新版本的 Windows 10 后 无论是内部版本还是新的周年更新 启动应用程序失败 事件日志显示以下错误 模
  • 在SQL Server中仅获取浮点数的小数部分[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在 SQL Server 2008
  • ASP.NET 视图中的区域?

    我正在使用 razor 引擎制作 ASP NET MVC 应用程序 我想知道是否可以使用Regions http msdn microsoft com en us library 9a1ybwek aspx在一个视图中 就像是 region
  • 使用ViewData或不使用ViewData

    我一直在阅读 Professional ASP NET MVC 1 0 一书 并阅读其他有关从控制器到视图中使用 ViewModel 而不是 ViewData 的资料 但后来我看到很多 ViewData 的例子都被用在一些困难的场景中 除了
  • 从异步方法同步调用 CPU 密集型方法的混乱

    我正在尝试 NET 4 5 的 async await 结构 我正在开发 RESTful Web API 解决方案 我试图弄清楚如何处理 CPU 绑定操作 1 从当前线程同步调用它 或 2 使用Task Run 让我们使用这个例子page
  • Cookie 在 ASP.net 中失去价值

    我有以下设置 cookie 的代码 string locale DropDownList this LoginUser FindControl locale SelectedValue HttpCookie cookie new HttpC
  • Membership.ValidateUser() 的目的是什么

    我一直在学习有关MembershipProvider类 我认为Membership ValidateUser 方法应该用于登录用户 然而我刚刚了解到有一个FormsAuthentication Authenticate 目的是什么Valid
  • 保护 ASP.NET MVC 应用程序中的 ajax 调用的安全

    我有一个基于 ASP NET MVC 的应用程序 它允许根据用户进行不同级别的访问 当前的工作方式是 当用户访问页面时 会根据数据库进行检查以确定用户拥有的权限 然后根据用户拥有的访问级别选择视图 有些用户比其他用户看到更多数据并拥有更多可
  • 纠正我在 mvc 中的 url 路由

    在我的 global asax 文件中 我有一个注册路由 routes MapRoute Default Route name controller action id URL with parameters new controller
  • SQL Server Express 到 .mdf 文件的连接

    两部分问题 我使用 VS 2015 Update 3 创建了一个 ASP NET MVC 5 应用程序 我在本地计算机上完成了该项目 突然 我无法再通过 SQL Server 对象资源管理器连接到 mdf数据库文件并出现以下错误 无法打开数
  • ASP.NET Web Api 的事件发布者

    我已经开始使用微服务 我需要创建一个事件发布机制 我计划使用 Amazon SQS 这个想法很简单 我将事件存储在与聚合相同的事务中的数据库中 如果用户更改他的电子邮件 事件UserChangedEmail将被存储在数据库中 我还有事件处理
  • 与简单的文件请求相比,您预计 Web 服务请求的响应时间开销是多少?

    我正在开发一个 asp net Web 服务应用程序 以向使用 jQuery ajax 发出请求的小部件提供 json 格式的数据 我一直在使用 FireBug Net 视图来检查数据请求需要多长时间 在我最初的原型中 我只是请求静态 js
  • 如何强制控制器/操作使用 JsonValueProvider

    再会 我正在使用 ASP NET MVC 3 其中JsonValueProvider http haacked com archive 2010 04 15 sending json to an asp net mvc action met
  • 带有服务总线的 SignalR Azure 云服务

    我使用 SignalR 构建了一个简单的聊天应用程序那里有教程 http www asp net signalr overview getting started tutorial getting started with signalr
  • 为多语言 ASP.NET WebAPI 应用程序设置 CurrentCulture 的最佳位置

    基于这个问题 为多语言 ASP NET MVC Web 应用程序设置 CurrentCulture 的最佳位置 https stackoverflow com questions 8226514 best place to set curr
  • 如何在asp.net中按下按钮后刷新Gridview

    我正在尝试制作一个简单的图书馆数据库 我在网格视图中列出搜索结果 然后有一个文本框和一个按钮 用户输入 isbn 并单击贷款按钮 然后 如果有足够数量的物品 itemNumber gt 0 则由用户借出 这是用户界面的屏幕截图 我的问题是
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 如何在服务器上保存用户凭据以在后台运行查询

    背景 我们有一个 ASP NET Silveright Web 应用程序 silverlight客户端显示用户 图形形式的特定数据 它从服务器请求数据 问题 由于服务器必须执行底层数据库查询 获取这些数据的成本很高 因此客户端必须等待 优化
  • asp.net cookie、身份验证和会话超时

    我有一个使用表单身份验证的 asp net 网站 我在会话中保留一些信息 例如用户名 用户 ID 电子邮件等 我通过在身份验证 cookie 上设置较长的到期日期来允许用户保持登录网站的状态 因此 当用户仍处于身份验证状态时 会话过期的情况

随机推荐

  • 在不同的 PHP 页面中使用相同的 MySQL 连接

    我正在为我的大学项目创建一个简单的 PHP Web 应用程序 我正在使用 MySQL 数据库 我连接到login php 中的数据库 连接后 我将连接分配给 SESSION conn 然后重定向到 main php 在 main php 中
  • 请求 npm:处理重定向

    我想知道是否有人知道如何使用 Request npm 处理来自 bitly 或 tribal 或 Twitter 的 t co URL 等网站的重定向 例如 如果我想使用 Request npm 抓取网页 并且我必须到达该页面的链接是一个将
  • 连接游标并排序

    我正在为 Android 编写一个 画廊类型 应用程序 在 主活动 中 我有一个 GridView 我想加载 填充设备上照片的缩略图 因此 我编写了一个 ContentProvider 其中查询方法从 MediaStore Media Th
  • 将plotly_click应用于闪亮应用程序中的2个以上绘图

    In the shiny在下面的应用程序中 我单击第一个折线图的一个点并对第二个折线图进行子集化 如果我选择首先单击第二个折线图 那么我会对第一个折线图进行子集化 但是 如果我有第三个折线图并且想要应用相同的逻辑怎么办 基本上 当我首先单击
  • 将循环替换为 *apply 替代方案

    我试图通过用 tapply 替换一些查找循环来加速我的代码 如何在 R 中进行查找和填充 就像在 Excel 中一样 我偶然发现了这段代码 DF lt data frame id c rep A 5 rep B 7 rep C 9 seri
  • Xcode Swift 4 Facebook 和 Twitter 共享不再起作用?

    我在我的应用程序中使用 Facebook 和 Twitter 共享 将 xCode 升级到 9 0 1 Swift 4 后 两者都不起作用 该方法说我的设备上没有 FB 或 Tw 帐户 但它们已经存在并且工作正常斯威夫特 3 Log 201
  • UITableViewController 的加载方法的逻辑顺序是什么?

    当执行segue来显示tableView时 UITableViewController的方法的逻辑执行顺序是什么 这是我最好的猜测 viewWillLayoutSubviews numberOfSectionsInTableView num
  • 如何在django中根据结束日期自动删除记录

    我有一个 Django 应用程序 其型号如下 Class Promotion models Model name models CharField max length 256 start date models DateTimeField
  • Typescript - “字符串”类型的表达式不能用于索引类型

    common js const boxNames one two module exports boxNames const common require common js const boxNames common boxNames c
  • 在 Eclipse 中使用支持设计库

    我正在开发一个项目 遗憾的是尚未迁移到 Android Studio 我想利用 Google 新的 support design 库中的浮动操作按钮 但我无法将其包含在我的项目中 我更新了 Android SDK 管理器中的支持库 首先 我
  • 附近查询与内部查询

    我使用 MongoDB 查询纬度 经度 25 英里以内的房屋 我第一次尝试使用近命令来执行此操作 如下所示 var near Query Near Coordinates coordinates Latitude coordinates L
  • Golang:当您具有多重继承时,接口的意义是什么[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我是一名 Java 程序员 正在学习 Go 编程 到目前为止 我真的很喜欢这门语言 比 Java 多得多 但有一件事我有点困惑 Java之所以有接口 是因为类只能从一个类继承 既然Go允许
  • Ant unzip/unwar 目录名与文件名相同

    我需要使用 ANT 构建脚本在 tomcat webapps 目录中解压缩一个 war 文件 war 文件名不固定 如何将其解压到与war文件名相同的目录中 我知道如何解压缩文件 但问题是它将内容解压缩到指定的目标目录中 如果我不知道目录名
  • iOS 8 中的 SKSpriteNode 池似乎分配给重叠内存

    我可能错过了一些东西 但是我当前在应用商店中的应用程序可以在 iOS 7 中运行 但在 iOS 8 中完全失败 因为它不会创建预分配的精灵池 它们似乎被写入相同的地址 除非精灵具有特别不同的属性 在 iOS 7 中 以下代码生成包含 4 个
  • 如何解析 Google 地图地理编码结果

    我想使用地理编码从给定的纬度和经度检索地理地址 使用网站上给定的示例 在这个例子中我只需要城市名称纽约和国家名称即美国 但问题是出现的次数不止一种 这些词作为long name 我的问题是如何在 php 中解析这个 json xml 以获取
  • 单元测试中的随机数据?

    我有一位同事为对象编写单元测试 这些对象用随机数据填充其字段 他的原因是它提供了更广泛的测试范围 因为它将测试许多不同的值 而普通测试仅使用单个静态值 我给了他很多不同的反对理由 主要是 随机值意味着测试并不是真正可重复的 这也意味着如果测
  • Kafka批量侦听器反序列化消息不正确

    我正在使用具有以下配置的批量侦听 但我的消息错误地反序列化 KafkaListener id kafka buyers product sales pricing id topics kafka buyers product sales p
  • Cordova/phonegap 项目中的“需要”异常

    我正在尝试在 Android 平台上使用 Phonegap Cordova 构建混合移动应用程序 我也成功了 该应用程序在我的 Chrome 浏览器中的 Ripple 模拟器中按预期工作 我没有使用 Eclipe ADT 或 Android
  • 如何修复 Angular 5 中的 CORS 问题 http 请求 [重复]

    这个问题在这里已经有答案了 我是 Angular 5 的新手 我想发送 http 请求 但它在检查元素中返回 CORS 错误 Error XMLHttpRequest 无法加载http example com account create
  • AddToRole 和 IdentityRole 不是当前上下文模型的一部分

    我正在使用 Identity 2 1 来处理我的 asp net 应用程序中的用户角色 到目前为止 一切顺利 我创建了从 IdentityDBContext 扩展的新上下文 扩展了 IdentityUser 和 IdentityRole 以