我有一个Profile类,我试图保存到数据库(MS SQL)。在数据库中,字段列为' NOT NULL'。默认/初始条目将是空字符串(string.empty)。
我认为空字符串不会因为NULL而失败,但似乎EF试图将它们作为NULL传递。是这样的吗?
这是一些模特类:
[Required]
public string Password { get; set; }
public string PasswordSalt { get; set; }
[Required]
[Display(Name = "Security Question")]
public string SecurityQuestion { get; set; }
[Required]
[Display(Name = "Security Answer")]
public string SecurityAnswer { get; set; }
这就是模特。这是尝试设置数据的代码,使用r作为DataRow:
newProfile = new Profile
{
Salutation = r["Salutation"].ToString(),
FirstName = r["FirstName"].ToString(),
MiddleName = r["MiddleName"].ToString(),
LastName = r["LastName"].ToString(),
Biography = r["Biography"].ToString(),
Password = string.Empty,
PasswordSalt = string.Empty,
SecurityQuestion = string.Empty,
SecurityAnswer = string.Empty,
EnteredDate = DateTime.Now,
LastUpdatedDate = DateTime.Now,
RecordVersion = StaticTools.RecordVersion(),
};
_db.Profile.Add(newProfile);
try
{
_db.SaveChanges();
}
catch (Exception ex)
{
throw ex;
}
因此,当我们尝试使用SaveChanges()时,对于Password,SecurityQuestion,SecurityAnswer,它会因DbValidationError而失败。
"安全问题字段是必需的。"
(当然,我们甚至不会检查空密码进行登录,用户必须关注注册邮箱并设置一个。)
答案 0 :(得分:1)
默认情况下,RequiredAttribute
不允许空字符串。您可以通过将AllowEmptyStrings
属性设置为true来覆盖此行为。
[Required(AllowEmptyStrings = true)]
public string Password { get; set; }
public string PasswordSalt { get; set; }
[Required(AllowEmptyStrings = true)]
[Display(Name = "Security Question")]
public string SecurityQuestion { get; set; }
[Required(AllowEmptyStrings = true)]
[Display(Name = "Security Answer")]
public string SecurityAnswer { get; set; }
答案 1 :(得分:0)
您的安全问题/答案属性上有“必需”标记。要求不需要为空字符串以传递必要的检查。
删除[Required]
标记,这样可以缓解您的问题。
RequiredAttribute属性指定在验证表单上的字段时,该字段必须包含值。如果属性为null,包含空字符串(“”)或仅包含空格字符,则会引发验证异常。