C# {“INSERT语句与外键约束冲突该语句已终止。”
还有一个userstats表,我想要一对一的关系,但是当我尝试注册一个用户时,我得到了上面的错误。谢谢你的帮助 用户表:C# {“INSERT语句与外键约束冲突该语句已终止。”,c#,asp.net-mvc-4,entity-framework-4,C#,Asp.net Mvc 4,Entity Framework 4,还有一个userstats表,我想要一对一的关系,但是当我尝试注册一个用户时,我得到了上面的错误。谢谢你的帮助 用户表: public class User { [Key] public int ID { get; set; } public int UserStatsID { get; set; } public virtual UserStats UserStats {
public class User
{
[Key]
public int ID { get; set; }
public int UserStatsID { get; set; }
public virtual UserStats UserStats { get; set; }
}
用户统计表
[Key]
public int ID { get; set; }
public int UserID { get; set;}
[Required]
public User User { get; set; }
注册详细控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(User user)
{
if (ModelState.IsValid)
{
db.Users.Add(user);
db.SaveChanges();
if (user.Gender == Gender.Male )
{
return RedirectToAction("RegisterMale", "RegisterStats", new {id = user.ID });
}
else
{
return RedirectToAction("RegisterFemale", "RegisterStats", new { id = user.ID });
}
}
return View(user);
}
不能完全通过外键强制实现真正的1:1关系,因为插入必须一次执行一个,这样做会违反约束
相反,您必须将关系设置为1:0。通过将
UserStatsID
设置为int?
而不是int
来实现这一点。问题是,您的表中有一个指向UserStats
表的外键。如果外键
字段为可空
,则可以使用int?
并在没有提供值的情况下将其置为空。无论如何,问题是您试图插入一条记录,其中外键的值在引用表中不作为主键存在。确保每当您为外键赋值时,引用表的记录中都有该键。您在哪里创建UserStats
?在提供的代码中,您没有设置它。UserStats
是否有UserId
和User
字段?设置User
类的方式确实表明User
侧存在1:1的关系,但如果没有看到UserStats
类,它可能是1:0,1:1,或1:*。在为用户执行此操作之前,似乎需要先在UserStats上创建并保存更改。我使用UserID和User navigation属性更新了UserStats表,但它仍然不起作用?