ASP.NET MVC4实体验证错误:用户名已被使用 [英] ASP.NET MVC4 entity validation errors: User name already taken

查看:137
本文介绍了ASP.NET MVC4实体验证错误:用户名已被使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

更新 4月24日,2014年周四19:31。

我新的ASP.NET MVC4,我会AP preciate它,如果有人能向我解释,我得到验证错误的原因。

我的应用程序正在使用的身份和数据库。
我有与用于测试的数据初始化一些表。不过,我得到验证错误时, dc.SaveChanges()被调用。

这是我应得的依次是:

1/3

我有类教师,从类派生

 公共类师资队伍:人{
    大众系(){
        this.Courses =新的List<课程和GT;();
        SenecaId =的String.Empty;
    }
    大众系(字符串FNAME,LNAME字符串,字符串电话,串senId)
        :基地(FNAME,LNAME,电话){
        this.Courses =新的List<课程和GT;();
        this.Messages =新的List<消息>();
        SenecaId = senId;
    }
    [需要]
    [RegularEx pression(^ [0] [0-9] {8} $,的ErrorMessage =0后跟8位)]
    公共字符串SenecaId {搞定;组; }
    公开名单<课程和GT;课程{搞定;组; }
    公开名单<消息>消息{搞定;组; }
}

从类派生 IdentityUser

 公共类人:IdentityUser {
    公众人物(){
      名字= =姓氏电话=的String.Empty;
    }
    公众人物(串f,串升,串P){
      名字= F;
      名字= 1;
      手机= P;
    }
    [键]
    公众诠释PERSONID {搞定;组; }
    [需要]
    [StringLength(40,MinimumLength = 3)]
    [显示(名称=名)]
    公共字符串名字{获得;组; }
    [需要]
    [StringLength(100,MinimumLength = 3)]
    [显示(名称=姓氏)]
    公共字符串名字{获得;组; }
    [需要]
    [RegularEx pression(^ [2-9] \\\\Ð{2} - \\\\ð{3} - \\\\ð{4} $的ErrorMessage =NNN-NNN-NNNN)]
    公共字符串电话{搞定;组; }
}

2/3:

创建角色教师

 字符串roleFaculty =系;
如果(!RoleManager.RoleExists(roleFaculty)){
    变种roleFacultyCreateResult = RoleManager.Create(新IdentityRole(roleFaculty));
}

我创建了一个教师对象(标记),并将其添加到角色教师

  // 1创建教师马克(8)
学院标志=新学院();
//添加标记,以角色教师
mark.SenecaId =034234678;
mark.FirstName =标记;
mark.LastName =费尔南德斯;
mark.Phone =555-567-6789;
mark.UserName =标记;串UserMarkPw =123456;
VAR UserMarkCreate = UserManager.Create(标记,UserMarkPw);
如果(UserMarkCreate.Succeeded){
    VAR addUserMarkToRoleFacultyResult = UserManager.AddToRole(mark.Id,roleFaculty);
}
mark.HomeTown =马卡姆;
VAR UserMarkInfo =新MyUserInfo(){
    名字=标记,姓氏=费尔​​南德斯};
mark.MyUserInfo = UserMarkInfo;
mark.PersonId = 8;
dc.Faculties.Add(标记);

3/3

由于标记在日志和数据库开始初始化,我得到这个错误:

 状态型学院实体新增了以下验证错误:
...
用户名彼得已被使用。


解决方案

您可能会收到错误用户名商标已被使用。
因为用户名'马克'用户创建并与下面的语句保存在数据库中。

VAR UserMarkCreate = UserManager.Create(标记,UserMarkPw);

您再次尝试添加标记在声明中dc.Faculties.Add(标记)直流电;

现在,当你做dc.SaveChanges(),再次尝试在数据库中插入标记。因此,你得到的错误,用户名商标已被使用。

Updated April 24, 2014. Thursday, 19:31.

I am new to ASP.NET MVC4 and I would appreciate it if somebody could explain to me the cause of the validation error I am getting.

My app is using Identity and a Database. I have some tables that are initialized with data for testing purposes. However I get Validation errors when dc.SaveChanges() is called.

This is what I have, in order:

1/3:

I have class Faculty, that derives from 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 Person derives from 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; }
}

2/3:

I create role Faculty:

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

I create a Faculty object (Mark) and add it to role Faculty:

// 1 create faculty Mark (8)
Faculty mark = new Faculty();
// add "mark" to role "faculty"
mark.SenecaId = "034234678";
mark.FirstName = "Mark";
mark.LastName = "Fernandes";
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 = "Fernandes" };
mark.MyUserInfo = UserMarkInfo;
mark.PersonId = 8;
dc.Faculties.Add(mark);  

3/3:

As Marks logs in, and the database starts initializing, I get this error:

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

解决方案

You may be getting error "User name Mark is already taken." Because user with UserName 'Mark' is created and saved in DB with following statement.

var UserMarkCreate = UserManager.Create(mark, UserMarkPw);

Again you are trying to add 'Mark' in dc with statement dc.Faculties.Add(mark);

Now when you do dc.SaveChanges(), it again tries to insert 'Mark' in DB. Hence you are getting error, "User name Mark is already taken."

这篇关于ASP.NET MVC4实体验证错误:用户名已被使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆