代码之家  ›  专栏  ›  技术社区  ›  Spencer

调用UserManager时,重写用户名字符串长度无效。CreateUserAsync,即使数据库也具有正确的字符串长度。

  •  1
  • Spencer  · 技术社区  · 8 年前

    public class User : AbpUser<User>
    {
        [MaxLength(500)]
        public override string UserName { get; set; }
    }
    

    但当我打电话时

    CheckErrors(await UserManager.CreateAsync(user));
    

    它将返回:

    System.Data.Entity.Validation.DbEntityValidationException: Validation failed for one or more entities. 
    

    public override int SaveChanges()
        {
            try
            {
                return base.SaveChanges();
            }
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                        eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (var ve in eve.ValidationErrors)
                    {
                        Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                            ve.PropertyName, ve.ErrorMessage);
                    }
                }
                throw;
            }
       }
    

    非常感谢您的帮助!

    2 回复  |  直到 8 年前
        1
  •  0
  •   Alper Ebicoglu    8 年前

    有一个常数叫做 最大用户名长度 所以基本上你需要改变这个常数。

      [Table("AbpUsers")]
      public abstract class AbpUserBase : FullAuditedEntity<long>, IMayHaveTenant, IPassivable
        {
            /// <summary>
            /// Maximum length of the <see cref="UserName"/> property.
            /// </summary>
            public const int MaxUserNameLength = 500;
    
            //...
    }
    

    这种修改背后的原因是用户名正在被验证为UserDto类,如下面所示;

    [Required]
    [StringLength(AbpUserBase.MaxUserNameLength)]
    public string UserName { get; set; }
    
        2
  •  0
  •   Spencer    8 年前

    经过数小时与abp模板的比较,我发现出现这种情况的原因是我对用户实体使用了[MaxLength]而不是[StringLength]。

    推荐文章