0

还有一个 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);
    }
4

2 回答 2

2

您不能完全通过外键强制执行真正的 1:1 关系,因为插入必须一次完成一个,这样做会违反约束。

相反,您必须将关系设为 1:0。通过制作UserStatsID一个int?而不是一个来做到这一点int

于 2013-09-03T16:48:57.120 回答
0

问题是您的表具有该表的外键UserStats。如果该foreign key字段是,那么如果没有提供值,nullable您可以使用并在其中放置一个空值。int?无论如何,问题是您正在尝试插入一条外键值不存在作为引用表中的主键的记录。确保每当您为外键分配值时,被引用的表在记录中都有该键。

于 2013-09-03T17:06:02.667 回答