ASP.NET MVC4 实体验证错误:用户名已被占用

2024-04-12

我是 ASP.NET MVC4 的新手,在下面的代码中遇到验证错误。

我的应用程序正在使用身份和数据库。

我有一些表填充了一些测试数据。致电dc.SaveChanges()返回验证错误。

我创建了以下类:Faculty源自类Person源自类IdentityUser.

我创建了一个名为Faculty,然后创建了一个Faculty对象命名mark并将其添加到Faculty角色。作为mark登录并且数据库开始初始化,我收到错误"User name Peter is already taken."

如果有解释,我们将不胜感激。

Code

Class Person:

public class Faculty : Person {
    public Faculty() {
        this.Courses = new List<Course>();
        SenecaId = string.Empty;
    }
    public Faculty(string fname, string lname, string phone, string senId)
        : base(fname, lname, phone) {
        this.Courses = new List<Course>();
        this.Messages = new List<Message>();
        SenecaId = senId;
    }
    [Required]
    [RegularExpression("^[0][0-9]{8}$", ErrorMessage = "0 followed by 8 digits")]
    public string SenecaId { get; set; }
    public List<Course> Courses { get; set; }
    public List<Message> Messages { get; set; }
}

Class IdentityUser:

public class Person : IdentityUser {
    public Person() {
      FirstName = LastName = Phone = string.Empty;
    }
    public Person(string f, string l, string p) {
      FirstName = f;
      LastName = l;
      Phone = p;
    }
    [Key]
    public int PersonId { get; set; }
    [Required]
    [StringLength(40, MinimumLength = 3)]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }
    [Required]
    [StringLength(100, MinimumLength = 3)]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }
    [Required]
    [RegularExpression("^[2-9]\\d{2}-\\d{3}-\\d{4}$", ErrorMessage = "nnn-nnn-nnnn")]
    public string Phone { get; set; }
}

Role Faculty:

string roleFaculty = "Faculty";
if (!RoleManager.RoleExists(roleFaculty)) {
    var roleFacultyCreateResult = RoleManager.Create(new IdentityRole(roleFaculty));
}

创造Faculty目的 (Mark) 并将其添加到角色中Faculty:

// 1 create faculty Mark (8)
Faculty mark = new Faculty();
// add "mark" to role "faculty"
mark.SenecaId = "034234678";
mark.FirstName = "Mark";
mark.LastName = "McTest";
mark.Phone = "555-567-6789";
mark.UserName = "Mark";

string UserMarkPw = "123456";
var UserMarkCreate = UserManager.Create(mark, UserMarkPw);
if (UserMarkCreate.Succeeded) {
    var addUserMarkToRoleFacultyResult = UserManager.AddToRole(mark.Id, roleFaculty);
}
mark.HomeTown = "Markham";
var UserMarkInfo = new MyUserInfo() { 
    FirstName = "Mark", LastName = "McTest" };
mark.MyUserInfo = UserMarkInfo;
mark.PersonId = 8;
dc.Faculties.Add(mark);  

错误:

"Entity of type Faculty in state Added has the following validation errors:"
...
"User name Peter is already taken."

你已经绑定了它们。That's你的问题。IdentityUser is用户帐户,因为Faculty is a Person is a IdentityUser, Faculty is a IdentityUser。通过创建Faculty对象,您也创建了一个用户帐户。

事实上,除非您自定义实体配置,否则实体框架会在 AspNetUsers 表中使用鉴别器列完成所有这些操作。换句话说,您没有实际的Faculty 表或Persons 表,而是一个AspNetUsers 表,其中有一列填充了特定类类型的名称(“Faculty”、“Person”等)。

UPDATE

身份仅支持一种用户类型。您可以指定什么类型IdentityDbContext<>您在应用程序上下文中继承的泛型。就您而言,您已将其设置为Person (i.e. IndentityDbContext<Person>)。这意味着,ApplicationUser根本没有被利用。如果这就是你想要的,那很好。您的“用户”可以随意命名;不一定是这样ApplicationUser。然后,您只需使用 STI(单表继承)来添加更具体的用户“类型”,这将是您的Faculty班级。实体框架默认对基类是实体(映射到数据库表)的继承结构执行此操作。基本上所有字段Faculty, Person and IdentityUser都映射到同一个数据库表,并且添加了一个鉴别器列来跟踪从数据库中提取该行时实体框架应实例化的特定类类型。 STI 是一种常见的继承策略,用于将对象层次结构映射到关系数据库,并且在大多数情况下它运行良好,但您需要记住超类上的所有字段must可以为空。换句话说,你不能有一个字段Faculty它在数据库级别不为 NULL,否则您将收到错误。但是,您可以通过应用程序将该字段设置为必需字段,即使从技术上讲,数据库级别不需要插入新行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC4 实体验证错误:用户名已被占用 的相关文章

  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern

随机推荐

  • 什么是谓词调度

    我最近看到很多关于 Clojure 中谓词分派的讨论 想知道这件事是否有什么意义 换句话说 什么是谓词分派以及它与泛型函数 OOP 多态性和模式有何不同 谢谢 谓词分派包含泛型函数 OOP 多态性 模式匹配等 一个好的概述是谓词调度 统一的
  • Coldfusion onCFCRequest 将 XML 的返回类型更改为 WDDX

    我的客户群终于不再使用 Coldfusion 8 所以现在我可以利用 Coldfusion 9Application cfc gt onCFCRequest事件 我有一个测试场景设置 但结果不是我所期望的 我有一个我调用的方法 它会产生一个
  • AngularJS 角度种子启动项目添加指令

    我正在尝试使用角度种子项目 https github com angular angular seed https github com angular angular seed 开始一个新项目 我正在尝试添加一个新指令 创建了 testD
  • PyQt4 中的多列(可能使用 QTreeWidget)

    我正在尝试让 QTreeWidget 的工作方式与此完全相同 在Python中 我不关心多个选项卡 而是关心多个列 这就是我到目前为止所得到的 我不知道如何拥有多个标题 self pointListBox QtGui QTreeWidget
  • Visual Studio 2010 的替代 unistd.h 头文件

    我正在编译代码Visual Studio 2010其中包括头文件unistd h 由于windows不支持头文件unistd h 我正在寻找替代头文件 或者有什么方法可以自定义它 以便我也可以在 Visual Studio 中编译它 尝试包
  • 与构造函数同名的方法 - 为什么?

    为什么允许以下内容 public class Foo public Foo public void Foo 将方法命名为与类相同的名称是否有正当理由 我的猜测是 它是被允许的 因为明确禁止它会给 Java 的标识符命名规则添加另一个要求 但
  • 如何检查 Windows 应用商店应用程序中是否存在文件?

    还有其他方法可以检查 Windows 应用商店应用程序中是否存在文件吗 try var file await ApplicationData Current LocalFolder GetFileAsync Test xml no exce
  • if 块内 std::lock_guard 的范围

    目前正在研究关于std mutex并希望得到一些帮助 如果我有一个看起来像这样的代码 if returnBoolValue std lock guard
  • 页面刷新后如何保持div隐藏?

    我有一个简单的显示和隐藏 div 该 div 在加载页面时自动加载 然后您可以通过单击关闭来关闭该 div 一旦刷新页面 div 就会再次显示 我如何将其编码为一旦关闭 就不会再打开一个月 提前致谢 Ben 这是我到目前为止的代码
  • 在 0.19 中将自定义 HTML 与 elmreactor 或其他开发服务器结合使用

    As 这个答案 https stackoverflow com a 41366859 7943564显示可以在 Elm 0 18 中运行elm reactor如果此代码段包含在 HTML 文件中 则使用自定义 HTML 文件 然而 在 0
  • 验证 Android 应用链接失败并出现错误 1024

    我有一个带有 applicationId 的 Android 应用程序com unibeam passkey1 At https unibeam github io well known assetlinks json 我存储了以下文件 r
  • 在 Scala 中处理 monad 时出错?尝试与验证

    scalaz Validation据说比Trymonad 因为它会累积错误 有没有什么场合你可以选择Try over scalaz Validation or scalaz 支持的最重要论据Try是它在标准库中 这也是used在标准库中 例
  • Gradle 依赖项导致错误“无效的幻数”

    我在 GitHub 上有一个项目 我在家里的办公室都在做这个项目 大约两个月来 两台机器都运行良好 然后两周前 它停止在我的家用电脑上运行 但是在我的工作电脑上仍然可以正常工作 这是我得到的错误 app shrinkDebugMultiDe
  • Swift CloudKit SaveRecord“保存记录时出错”

    我正在尝试将记录保存到 CloudKit 但收到错误 我在其他地方看到这是一个需要知道如何保存的问题 但我无法让它发挥作用 var database CKDatabase CKContainer defaultContainer publi
  • 以编程方式更改 UITableView 的大小

    我正在尝试显示服务器上 mysql 数据库中的数据 我正在将数据加载到表中 问题是 我不希望这些数据成为视图上的唯一内容 我希望该表与其他内容共享 理想情况下 我希望表格能够随着单元格的数量而增长和扩展 因此 如果有 3 个单元格 我希望它
  • 如果处理后台消息,firebase_messaging flutter 插件会在启动时崩溃

    我综合了firebase messaging v5 1 6 https pub dev packages firebase messaging使用我的 flutter 应用程序 如自述文件中提到的 处理后台消息 选项 这是我的文件的外观 我
  • 使用 intelliJ 将字符串串联重构为 StringBuilder

    我被指定对一个项目进行重构 我遇到了这种情况 this path DESTINY deploy name FILE SEPARATOR delivery getSystem getCode FILE SEPARATOR delivery g
  • 求 a^b^c^... mod m

    我想计算一下 abcd mod m 你知道有什么有效的方法吗 因为这个数字太大了 但 a b c 和 m 适合一个简单的 32 位 int 有任何想法吗 Caveat This question is different from find
  • Spring 5 的反应式 WebSockets - 如何获取初始消息

    我遵循了该教程 特别是浏览器 WebSocket 客户端的部分 http www baeldung com spring 5 reactive websockets http www baeldung com spring 5 reacti
  • ASP.NET MVC4 实体验证错误:用户名已被占用

    我是 ASP NET MVC4 的新手 在下面的代码中遇到验证错误 我的应用程序正在使用身份和数据库 我有一些表填充了一些测试数据 致电dc SaveChanges 返回验证错误 我创建了以下类 Faculty源自类Person源自类Ide