C# SqlException:无法将值NULL插入表“dbo.Users”的列“UserDetail_Id”;列不允许空值。插入失败

C# SqlException:无法将值NULL插入表“dbo.Users”的列“UserDetail_Id”;列不允许空值。插入失败,c#,asp.net-mvc,entity-framework-6,C#,Asp.net Mvc,Entity Framework 6,尝试向表中添加数据时出错。请让我知道我的代码有什么问题。我已经把我所有的代码都放好了。我希望这将有助于你理解我的问题 这是我的操作方法“RegisterButton”。在这个操作方法中,我向数据库添加数据 public ActionResult RegisterButton(Models.Users User) { using (MyDbContext db = new MyDbContext()) { db.Database.Cr

尝试向表中添加数据时出错。请让我知道我的代码有什么问题。我已经把我所有的代码都放好了。我希望这将有助于你理解我的问题

这是我的操作方法“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; }

}
UserDetail_Id在Users表中是必需的,因此您应该在controller/RegisterButton函数中的案例中设置它


您可能应该从视图中获取自定义viewmodel,并将接收到的数据映射到用户对象。

如果不显示表架构,如果不显示用户是如何创建的,如果不显示生成的sql,我们应该如何帮助您?你最好写一些有用的细节。我是这样写的:public ActionResult RegisterButtonUsers User{}
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; }
}