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 实体验证错误:用户名已被占用 的相关文章

随机推荐

  • 什么是谓词调度

    我最近看到很多关于 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