INSERT语句与FOREIGN KEY约束错误冲突

时间:2014-02-03 02:53:22

标签: c# sql-server entity-framework-5 asp.net-mvc-5 asp.net-identity

嗨,我收到此错误

  

INSERT语句与FOREIGN KEY约束“FK_dbo.AspNetUsers_dbo.Contacts_ContactID”冲突。

     

冲突发生在数据库“aspnet-COGMakati-20140119015553”,表“dbo.Contacts”,列'ContactID'。

     

声明已经终止。

我正在使用Entity Framework和MVC 5的IdentityUser,所以我真的迷失了我正在做的事情:|

这就是我想要填充的内容:

public class User : IdentityUser
{
    [Required]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Required]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }

    [Required]
    public string Email { get; set; }

    public string Birthday { get; set; }
    [Display(Name = "Referred By")]
    public string LifegroupPreference { get; set; }
    [Display(Name = "Civil Status")]
    public string CivilStatus { get; set; }

    public int EducationID { get; set; }
    public int WorkID { get; set; }
    public int ContactID { get; set; }
    public int FamilyID { get; set; }
    public int SpiritualID { get; set; }
    public int GrowthMilestoneID { get; set; }

    [ForeignKey("EducationID")]
    public virtual Education Education { get; set; }
    [ForeignKey("WorkID")]
    public virtual Work Work { get; set; }
    [ForeignKey("ContactID")]
    public virtual Contact Contact { get; set; }
    [ForeignKey("FamilyID")]
    public virtual Family Family { get; set; }
    [ForeignKey("SpiritualID")]
    public virtual Spiritual Spiritual { get; set; }
    [ForeignKey("GrowthMilestoneID")]
    public virtual GrowthMilestone GrowthMilestone { get; set; }
}

我看到它的方式,即使在制作用户之前也创建了Contact。我不知道为什么会发生这种情况,因为当不使用IdentityUser时,这段代码就可以很好地填充它。

现在这是Register方法:

public async Task<ActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = model.GetUser();
        var result = await UserManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            var idManager = new IdentityManager();
            idManager.AddUserToRole(user.Id, "User");

            await SignInAsync(user, isPersistent: false);
            return RedirectToAction("ViewAllMembers", "Home");
        }
        else
        {
            AddErrors(result);
        }
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

3 个答案:

答案 0 :(得分:12)

您可能正在尝试使用不存在的外键访问或插入。转到dbo.Contacts表并查找包含该密钥的记录。您将在表格中找不到包含该密钥的记录。您需要使用该密钥创建记录或使用其他(现有)密钥。

答案 1 :(得分:3)

如果您正在创建FK对象,那么您应该首先存储它并检索其ID,因此如果没有FK值,则会导致FK_Key失败。

沃尔特

答案 2 :(得分:0)

如果您愿意,可以允许引用不存在的记录

Sql("ALTER TABLE dbo.Users NOCHECK CONSTRAINT [FK_dbo.Users_dbo.Roles_RoleID]");