SqlException:无法将值NULL插入表'dbo.Users'的列'UserDetail_Id'中;列不允许为空。插入失败

时间:2018-07-08 07:21:22

标签: c# asp.net-mvc entity-framework-6

在尝试向表中添加数据时出现错误。请让我知道我的代码有什么问题。我已经放置了所有代码。我希望这能帮助您理解我的问题。

这是我的操作方法“ RegisterButton”。通过这种操作方法,我正在向数据库添加数据。

public ActionResult RegisterButton(Models.Users User)
    {
        using (MyDbContext db = new MyDbContext())
        {
            db.Database.CreateIfNotExists();
            if (ModelState.IsValid == false)
            {
                return View("Register", User);
            }

            else
            {
                db.Users.Add(User);
                db.SaveChanges();
                //Directory.CreateDirectory(string.Format("~/App_Data/{0}",User.UserName+User.Id.ToString()));
                return RedirectToAction("Profile", "Profile", new { User.Id });
            }
        }
    }

这是我的用户类及其属性:

public class Users
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required(ErrorMessage = "لطفا نام کاربريتان را وارد نماييد")]
    [MaxLength(30, ErrorMessage = "لطفا مقدار کاراکتر هاي نام کاربريتان کمتر از 30 حرف برسانيد")]
    [MinLength(8, ErrorMessage = "لطفا مقدار کاراکتر هاي نام کاربريتان بيشتر از 8 حرف برسانيد")]
    [Display(Name = " نام کاربری")]
    [Remote("CheckUserName","RegisterAndLogin","این نام کاربری قبا ثبت شده است")]
    public string UserName { get; set; }
    [NotMapped]
    [Required(ErrorMessage = "لطفا پسوردتان را وارد نماييد")]
    [MaxLength(30, ErrorMessage = "لطفا مقدار کاراکتر هاي پسورد کمتر از 30 حرف برسانيد")]
    [MinLength(8, ErrorMessage = "لطفا مقدار کاراکتر هاي پسورد بيشتر از 8 حرف برسانيد")]
    [Display(Name = " رمز عبور")]
    public string Password { get; set; }
    [NotMapped]
    [Display(Name = " تکرار رمز عبور")]
    public string AgainPassword { get; set; }
    public Byte HashedPassword { get; set; }

    [Required(ErrorMessage = "لطفا ايميلتان را وارد نماييد")]
    [MaxLength(50, ErrorMessage = "لطفا مقدار کاراکتر هاي ايميليتان کمتر از 50 حرف برسانيد")]
    [MinLength(8, ErrorMessage = "لطفا مقدار کاراکتر هاي ايميليتان بيشتر از 20 حرف برسانيد")]
    [Display(Name = " پست الکترونیک")]
    public string Email { get; set; }
    [Required]
    public virtual UserDetails UserDetail { get; set; }
    [InverseProperty("UserOwner")]
    public virtual ICollection<Images> OwnerImages { get; set; }
    [InverseProperty("UserCreated")]
    public virtual ICollection<Images> CreatedImages { get; set; }

}

这是我的UserDeatils类:

public class UserDetails
{
    [Key]
    [ForeignKey("User")]
    public int UserId { get; set; }
    [Display(Name ="نام")]
    [Required(ErrorMessage = "لطفا نامتان را وارد نماييد")]
    [MaxLength(30, ErrorMessage = "لطفا مقدار کاراکتر هاي نامتان کمتر از 30 حرف برسانيد")]
    [MinLength(3, ErrorMessage = "لطفا مقدار کاراکتر هاي نامتان بيشتر از 3 حرف برسانيد")]
    public string FirstName { get; set; }
    [Required(ErrorMessage = "لطفا فاميليتان را وارد نماييد")]
    [MaxLength(30, ErrorMessage = "لطفا مقدار کاراکتر هاي نامتان کمتر از 30 حرف برسانيد")]
    [MinLength(3, ErrorMessage = "لطفا مقدار کاراکتر هاي نامتان بيشتر از 3 حرف برسانيد")]
    [Display(Name = " نام خانوادگی")]
    public string LastName { get; set; }
    [Required(ErrorMessage = "لطفا اسم پدر را وارد نماييد")]
    [MaxLength(30, ErrorMessage = "لطفا مقدار کاراکتر هاي نام پدرتان را کمتر از 30 حرف برسانيد")]
    [MinLength(3, ErrorMessage = "لطفا مقدار کاراکتر هاي نام پدرتان را بيشتر از 3 حرف برسانيد")]
    [Display(Name = " نام پدر")]
    public string FatherName { get; set; }
    [Required(ErrorMessage = "لطفا اسم مادر را وارد نماييد")]
    [MaxLength(30, ErrorMessage = "لطفا مقدار کاراکتر هاي نام مادرتان را کمتر از 30 حرف برسانيد")]
    [MinLength(3, ErrorMessage = "لطفا مقدار کاراکتر هاي نام پدرتان را بيشتر از 3 حرف برسانيد")]
    [Display(Name = " نام مادر")]
    public string MotherName { get; set; }

    [Required(ErrorMessage = "لطفا سال تولدتان را وارد نماييد")]
    [Display(Name = " زمان تولد")]
    public DateTime BirthDate { get; set; } = DateTime.Now;
    public virtual Users User { get; set; }
}

1 个答案:

答案 0 :(得分:0)

UserDetail_Id表中的Users是必需的,因此您应该将其设置在某个位置(在您的情况下,在controller / RegisterButton函数中)。

可能应该从视图中获取自定义视图模型,并将接收到的数据映射到User对象。