ASP.NET MVC 5中的ApplicationUser作为外键

3
我希望能在用户访问内容页面时更新UserContent表。我创建了一个控制器来尝试手动输入数据,但在实施此操作之前,我遇到了外键错误:
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.UserContent_dbo.IdentityUser_ApplicationUserId". The conflict occurred in database "COMPILING_a6a38dac907c4816af896bbeb6cdaa55", table "dbo.IdentityUser", column 'Id'.
The statement has been terminated.

型号:

public class UserContent
{
    public int ID { get; set; }

    [Display(Name = "Times Visited")]
    public int Visited { get; set; }

    [Display(Name = "Rating")]
    public byte Rating { get; set; }

    [Display(Name = "Content Page")]
    public int ContentID { get; set; }

    [Display(Name = "User")]
    public string ApplicationUserId { get; set; }

    public virtual Content Content { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
}

控制器:

private CompilingContext db = new CompilingContext();
private ApplicationDbContext db2 = new ApplicationDbContext();  

public ActionResult Create([Bind(Include="ID,Visited,Rating,ContentID,ApplicationUserId")] UserContent usercontent)
    {
        if (ModelState.IsValid)
        {
            db.UserContent.Add(usercontent);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        ViewBag.ApplicationUserId = new SelectList(db2.Users, "Id", "UserName", usercontent.ApplicationUserId);
        ViewBag.ContentID = new SelectList(db.Contents, "ID", "Title", usercontent.ContentID);
        return View(usercontent);
    }

当调用db.UserContent.Add(usercontent);时,usercontent的状态是什么?它是否具有有效的ApplicationUserId? - Brendan Green
@BrendanGreen 这是一个匹配AspNetUsers表中用户的ID。我还看了IdentityUser表,它是空的。我不知道这是否应该是这样的,因为我很难找到MVC 5的资源。 - nvitaterna
1
那就是问题所在。不知道你的模型细节,你在UserContent中有一个指向IdentityUser表中Id列的ApplicationUserId外键。如果IdentityUser为空,你会收到这个错误。请参考此资源了解ASP.NET Identity的详细信息:http://www.asp.net/identity - Brendan Green
通过将所有内容放入相同的上下文中,修复了它。 - nvitaterna
1个回答

2

我通过将所有模型放入一个上下文中来解决了这个问题。我最初将它们放在两个不同的上下文中,这导致了问题,因为它给我提供了两个不同的数据库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接