C# {“INSERT语句与外键约束冲突该语句已终止。”

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 {

还有一个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表,但它仍然不起作用?