ASP.NET Identity - 将用户 ID 主键默认类型从字符串更改为 int 以及使用自定义表名称时出错

2024-01-02

我正在使用 Microsoft.AspNet.Identity 2.0.0-beta1 和 Entity Framework 6.1.0-beta1(2014 年 2 月 11 日发布)。

当我尝试将用户 ID 主键的默认类型从字符串更改为 int 时,出现以下错误AND当我尝试使用自定义表名称时(因此 User.MyUsers 而不是 dbo.AspNetUsers):

"实体类型“IdentityUser”和“ApplicationUser”无法共享表“MyUsers”,因为它们不在同一类型层次结构中,或者它们之间没有与匹配主键的有效一对一外键关系。"

我可以成功地将用户 ID PK 的默认类型从字符串更改为 int 或更改默认身份表名称,但我不能同时执行这两项操作together没有遇到这个错误。

我的解决方案基于:

1:“使主键类型可针对用户和角色进行扩展”部分http://blogs.msdn.com/b/webdev/archive/2013/12/20/announcing-preview-of-microsoft-aspnet-identity-2-0-0-alpha1.aspx http://blogs.msdn.com/b/webdev/archive/2013/12/20/announcing-preview-of-microsoft-aspnet-identity-2-0-0-alpha1.aspx.

2: 使用 Visual Studio 2013 ASP.NET Identity 时如何更改表名称? https://stackoverflow.com/questions/19460386/how-can-i-change-the-table-names-when-using-visual-studio-2013-aspnet-identity.

我的实际代码是:

using Microsoft.AspNet.Identity.EntityFramework;

namespace Musetone.Models
{
public class ApplicationUser : IdentityUser<int, CustomUserLogin, CustomUserRole, CustomUserClaim>
{
}

public class CustomRole : IdentityRole<int, CustomUserRole>
{
    public CustomRole() { }
    public CustomRole(string name) { Name = name; }
}

public class CustomUserRole : IdentityUserRole<int> { }
public class CustomUserClaim : IdentityUserClaim<int> { }
public class CustomUserLogin : IdentityUserLogin<int> { }

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, CustomRole, int, CustomUserLogin, CustomUserRole, CustomUserClaim>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }

    protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<IdentityUser>().ToTable("MyUsers", "User").HasKey(u => u.Id).Property(u => u.Id).HasColumnType("int");
        modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers", "User").HasKey(u => u.Id).Property(u => u.Id).HasColumnType("int");
        modelBuilder.Entity<IdentityUserRole>().ToTable("MyUserRoles", "User").HasKey(r => new { r.RoleId, r.UserId }).Property(r => r.UserId).HasColumnType("int");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("MyUserLogins", "User").HasKey(l => new { l.UserId, l.LoginProvider, l.ProviderKey }).Property(l => l.UserId).HasColumnType("int"); 
        modelBuilder.Entity<IdentityUserClaim>().ToTable("MyUserClaims", "User").Property(c => c.UserId).HasColumnType("int"); 
        modelBuilder.Entity<IdentityRole>().ToTable("MyRoles", "User").HasKey(r => r.Id); 
    }
}
}

即使我删除 HasColumnType("int"),我也会收到此错误。

任何帮助将不胜感激。


我认为映射可能不正确。在定义 ApplicationDbContext 类时,您将使用为通用角色、登录名和声明定义的自定义类,但传递用于映射表的基类。对于 ChangePK 示例,以下映射对我有用。让我知道这是否也适合您。映射应该足够简单

   protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers");
        modelBuilder.Entity<CustomUserRole>().ToTable("MyUserRoles");
        modelBuilder.Entity<CustomUserLogin>().ToTable("MyUserLogins");
        modelBuilder.Entity<CustomUserClaim>().ToTable("MyUserClaims");
        modelBuilder.Entity<CustomRole>().ToTable("MyRoles");
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Identity - 将用户 ID 主键默认类型从字符串更改为 int 以及使用自定义表名称时出错 的相关文章

  • 如何使用 MongoDB 实现 ASP.NET Core 3.1 Identity?

    是一个 API 用于简化后端和逻辑代码来管理用户 密码 个人资料数据 角色 声明 令牌 电子邮件确认等 对于 Visual Studio 来说 支撑脚手架 https learn microsoft com en us aspnet cor
  • AspNetUserLogins 表身份

    AspNetUserLogins 的用途是什么 是存储用户的登录信息吗 然后我如何用该数据更新该表 AspNetUserLogins 的用途是什么 在Asp net Identity中 Identity系统使用AspNetUserLogin
  • Entity Framework 4.1 RC:Code First EntityTypeConfiguration 继承问题

    我尝试使用通用的 EntityTypeConfiguration 类来配置所有实体的主键 以便每个派生的配置类不会重复自身 我的所有实体都实现一个公共接口 IEntity 它表示每个实体必须有一个 int 类型的 Id 属性 我的配置基类如
  • EF数据库首先如何针对数据库更改更新模型?

    在班级图书馆Ado net Entity Data Model已生成 POCO 类 这些是第一次生成的 但数据库更改并未得到反映 在edmx图表右键单击并选择Update Model from Database显示新创建的表 但即使选择添加
  • 将 ASP.NET Identity 实施到现有数据库中

    我有一个现有的项目和 SQL 数据库 其中包含一个用户表 我们称之为 MyOldUsersTable 和带有 PK FK 关系的附加表 地址 电话 职位等 注意 该数据库不使用成员身份或身份 它是从另一个项目中提取的数据库 MyOldUse
  • 使用 EF6 连接到 SQL Server

    在 EF5 之前 为了连接到 SQL Server 2012 我所需要做的就是指定一个如下所示的连接字符串 Data Source SqlExpress Initial Catalog MyDatabase Integrated secur
  • Entity Framework 6(代码优先)实体版本控制和审计

    我正在考虑将 Entity Framework 6 1 1 与 SQL Server 2008 R2 一起使用 目前 我正在使用代码优先的 EF 功能创建模型和数据库 我的基本用例是创建一个特定实体的所有更改的日志 ID是关键栏 以帮助审核
  • 处理与不同相关实体的一对多的正确模式

    我有一个 C 项目 我使用实体框架作为 ORM 我有一个User 可以向多家银行付款 每家银行都是一个独立的实体 并且每家银行都由不同的字段描述 问题是 一User可以没有或有很多不同的Banks 我不太确定如何对此进行建模 临时解决方案是
  • ASP Identity CoreGeneratePasswordResetTokenAsync 已过期

    我已经在 NET Core 2 1 中设置了一个 Identity Server 4 项目 一切正常 但是当我使用用户管理器生成重置密码令牌时 令牌在 24 小时后过期 我可以将其更改为 48 小时吗 我发送重置令牌的代码如下所示 var
  • 调用异步方法时什么情况下使用.Wait()

    我有以下内容async我的 asp net mvc 5 Web 应用程序中长时间运行的方法 public async Task
  • ASP.NET Identity:使用角色授权属性在 Azure 上不起作用

    我刚刚在 Azure 上发布了带有 Identity 和 OWIN 授权的新 ASP NET MVC 网站 前端工作得很好 但后端有问题 我在管理控制器中使用 Authorize 属性来检查用户是否具有访问它所需的角色 如下所示 Autho
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • 我可以将 UseCSharpNullComparisonBehavior 用于单个查询吗?

    我有一个查询 该查询曾经是存储过程 现已转换为 EF 查询 现在已经超时了 使用 SQL Profiler 我可以看到生成的 SQL 的唯一区别是 EF 转变的新行为entity Property value into entity Pro
  • Web API 2 和 ASP Identity - 处理锁定的用户

    我刚刚将我的 Web 应用程序 ASP NET MVC 迁移到 ASP Identity 经过相当多的工作后 除了 Web 应用程序提供的 API 之外 一切都工作正常 这是一个 WEB API 2 它使用不记名令牌机制来验证用户身份 身份
  • 如何使用 Linq 将实体表与交叉引用表连接起来

    首先我要说的是 我对 Linq 比较陌生 但我似乎很快就掌握了其中的大部分内容 但这个问题却难倒了我 我找了又找都没有结果 我使用代码优先并创建了 2 个模型 项目 和 关键字 他们之间存在多对多的关系 我的实体模型如下所示 public
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • 如何检查DBContext是否已释放?

    我想与从外部 继承类 调用的另一个方法共享数据库上下文 而不创建新的上下文 除非正在释放它 我想检查上下文是否已处理 以便我可以创建新的上下文 这是休息 api 有多个实体的批量上传 我想共享事务 因此如果一个实体失败 它将不会提交到数据库
  • 将数据库优先迁移到代码优先 - 从发布切换到迁移

    我们需要将现有项目从数据库优先迁移到代码优先 每个环境 DEV TEST PROD 的数据库版本略有不同 差异在于 DEV 中的更改可能尚未推送到 TEST 和 PROD 我们使用实体框架 6 1 3 我们有一个数据库项目部署数据库 发布操
  • EF Core 一对多关系列表返回 null

    我正在尝试学习如何在 EF Core 中正确利用 DbContext 我有一个团队课程 public class Team public int ID get set public string Name get set public bo
  • 将 SimpleMembership 数据库迁移到 Identity 2 后 User.IsInRole 失败

    我成功地将我的应用程序从 MVC4 EF5 更新到 MVC5 EF6 然后我将数据库从 Simplemebership 迁移到 Identity 2 0 我可以登录 但 User IsInRole 总是返回 false 所有正确的表 Asp

随机推荐

  • 为什么不按照词法封闭的“define”来实现“let”?

    我已经使用 lisp 家族语言工作了好几年 感觉我对它们有了很好的掌握 我现在正在编写自己的 lisp 当然 这是一种时尚 但几乎完全避免重新实现 Scheme Common Lisp 和朋友使用过的相同模式 我总是觉得奇怪的一件事是所有的
  • 来自数据库的 之间的 PHP eval() 代码

    我希望能够将 PHP 放入数据库并运行它 我必须这样做 因为我将页面布局存储在数据库中 并且每个页面布局彼此不同 但是在某些情况下 我想对某些页面使用动态内容 Assume query from db是从数据库返回的字符串 PHP 应该只
  • NDIS 和微型端口驱动程序

    我正在尝试使用 Visual Studio 2012 中提供的 WDK 工具修改以太网驱动程序 WDK 中提供的示例包括 微型端口适配器 和 NDIS 轻量级过滤器 等 我仍处于驱动程序编写的最初阶段 因此发现很难浏览代码 在 Visual
  • C++11 中的常量表达式中是否允许使用逗号运算符?

    在回答的过程中这个问题关于SO https stackoverflow com questions 16563114 are these null pointers or are they pointers to address 0 165
  • 使用端口 1433 的 Azure 输入端点被阻止?

    我正在运行一个 Windows Azure 辅助角色 该角色在端口 1433 上公开 WCF 服务 该端口也被定义为输入 TCP 端点
  • 自 SonarQube 5.2 起,批处理端不再支持任务

    我安装 SonarQube 5 2 和 Sonar runner 2 4 最新版本 我设法启动 SonarQube 但在尝试运行 Sonar runner 时出现以下错误 ERROR Unable to execute Sonar ERRO
  • 在devise 2.0中使用omniauth从facebook获取用户个人资料大图片

    我想从 Facebook 获取用户个人资料大图或普通图片 现在我使用以下代码从用户个人资料图片中获取方形版本 image gt access token info image http graph facebook com id pictu
  • 返回布尔值的 Java 方法的命名约定

    我喜欢在其他语言中的方法 函数名称末尾使用问号 Java 不允许我这样做 作为解决方法 我还能如何在 Java 中命名返回布尔值的方法 使用is has should can在某些情况下 在方法前面听起来不错 有没有更好的方法来命名这些方法
  • 如何在 PostgresQL 10 中备份分区表

    是否可以使用 PostgreSQL 10 备份特定分区表 使用时 sudo pg dump Fc f home schema backup t schema partitioned table dbname 我只得到基表的骨架 没有任何值
  • 锁分割与锁条带化

    以下是 Joshua 的 Effective Java 的摘录 如果您确实在内部同步您的类 您可以使用各种 实现高并发的技术 如锁分割 锁 条带化和非阻塞并发控制 上面表明锁分割和锁条带是两种不同的技术 但是当我试图找出它们之间的区别时 我
  • 如何将 Django 应用程序部署到 (AWS) 域名?

    我只使用 Django 几个星期 刚刚学习了部署 我有一个 AWS EC2 实例 我可以将我的 Django 网站 应用程序部署到其中 即 如果我在浏览器中访问 IP 地址 我就可以访问我的网站 但是 我不知道如何将同一个网站部署到我在 A
  • std::initializer_list{x, y, z} (CTAD) 有效吗?

    当构建一个std initializer list u 明确地 模板参数 U 被推导 例如 使用类模板参数推导 CTAD 换句话说 我知道以下陈述是有效的 std initializer list u
  • Rails 资产管道:将资产包含在公共文件夹而不是资产文件夹中是否是一个好习惯?

    我一直在努力将 Google Analytics 添加到我的 Rails 4 应用程序中 请参阅这个帖子 https stackoverflow com q 31428864 5086345 我通过在新文件中添加 Google 提供的 Ja
  • Lucene - 这是巨大索引的正确答案吗?

    Lucene 是否能够索引每个 50K 的 500M 文本文档 对于单个术语搜索和 10 个术语搜索 此类索引的预期性能如何 我应该担心并直接转移到分布式索引环境吗 Saar 是的 Lucene 应该能够处理这个问题 根据以下文章 http
  • 从音频文件输入中检测人声

    我正在尝试实现自动录音功能 类似于会说话的汤姆应用程序 我使用以下代码从录音机读取输入并分析缓冲区 float totalAbsValue 0 0f short sample 0 numberOfReadBytes audioRecorde
  • Git LFS - 如何使用一个命令跟踪多种文件类型

    我在 Git LFS 网站和文档中看到此命令 git lfs track psd 我的项目中有多种文件类型 我想使用 LFS 进行跟踪 并且希望在未来的项目中跟踪所有这些相同的文件类型 我希望能够粘贴单个命令来跟踪所有这些扩展 这可能吗 经
  • C++ 字符串文字数据类型存储

    void f char c Hello World 字符串存储在哪里 它有什么属性呢 我只知道它是一个常数 还有什么 我可以从函数体内返回它吗 它与您的二进制文件一起打包 我所说的打包是指硬连线 所以是的 您可以返回它并在其他地方使用它 但
  • 访问 Jenkins 中的构建变更日志

    我一直在绞尽脑汁地试图找到一种方法 将 Jenkins 生成的更改列表 来自 SVN pull 包含到我们的 Testflight 笔记中 我正在使用 Testflight 插件 它有一个注释字段 但詹金斯似乎没有创建任何参数 令牌来嵌入该
  • Java 中的持久数据结构

    有谁知道关于在 Java 中创建和使用持久数据结构的库或至少一些研究吗 我并不是将持久性称为长期存储 而是将持久性称为不变性 请参阅维基百科条目 http en wikipedia org wiki Persistent data stru
  • ASP.NET Identity - 将用户 ID 主键默认类型从字符串更改为 int 以及使用自定义表名称时出错

    我正在使用 Microsoft AspNet Identity 2 0 0 beta1 和 Entity Framework 6 1 0 beta1 2014 年 2 月 11 日发布 当我尝试将用户 ID 主键的默认类型从字符串更改为 i