C# SqlException:无法将值NULL插入表“dbo.Users”的列“UserDetail_Id”;列不允许空值。插入失败
尝试向表中添加数据时出错。请让我知道我的代码有什么问题。我已经把我所有的代码都放好了。我希望这将有助于你理解我的问题 这是我的操作方法“RegisterButton”。在这个操作方法中,我向数据库添加数据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
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; }
}