INSERT语句与带有用户ID(ASP标识)的FOREIGN KEY冲突

时间:2019-03-13 12:34:57

标签: c# asp.net asp.net-identity

我正在开发一项功能,该功能允许用户通过表单提交帖子,它可以从AspNetUsers成功获取用户ID。 我实现了一个单选按钮,使用户可以选择成为匿名提交。代码如下,

protected void AddPost(object sender, EventArgs e)
{



    var User = System.Web.HttpContext.Current.User.Identity.GetUserId();
    if (Convert.ToBoolean(Int32.Parse(inputAnonymous.SelectedValue)))
    {
        User = "anonymous";
    }

    Post newPost = new Post()
    {
        postTitle = inputTitle.Text,
        postBody = inputBody.Text,
        postDescription = inputDescription.Text,
        postCategory = inputCategory.SelectedValue,
        postAnonymous = Convert.ToBoolean(Int32.Parse(inputAnonymous.SelectedValue)),
        Id = User
    };

    using (var _dbContext = new ApplicationDbContext())
    {
        _dbContext.Posts.Add(newPost);
        _dbContext.SaveChanges();
    }
}

当为用户匿名选择选项“否”时,帖子将正常提交,并将ID发布到数据库等,但是当我跟随调试器单击“是”时,它表示是认识到它是匿名的,应该将userId更改为字符串“ anonymous”,并将其作为数据库中的ID提交,但是我一直收到此错误,阻止我这样做如下

SqlException:INSERT语句与FOREIGN KEY约束“ FK_dbo.Posts_dbo.AspNetUsers_Id”冲突。数据库“ aspnet-WebEnterprise-20190201040107”的表“ dbo.AspNetUsers”的“ Id”列中发生了冲突。 该声明已终止。

更新: 我已将这段代码添加到我的configuration.cs

 {
                var passwordHash = new PasswordHasher();
                string password = passwordHash.HashPassword("Anonymous@123");
                context.Users.AddOrUpdate(u => u.UserName,
                    new ApplicationUser
                    {
                        UserName = "Anonymous@Anonymous.com",
                        PasswordHash = password,
                        PhoneNumber = "12345678911",
                        Email = "Anonymous@Anonymous.com"
                    });
                context.Roles.AddOrUpdate(
                    new IdentityRole { Id = "a1f04ba5-5600-4a6e-be43-ae0d6360c0ab", Name = "Anonymous" }
                    );
            }

但是当我在nuget数据包管理器上更新数据库时,出现以下错误

“更新条目时发生错误。有关详细信息,请参见内部异常。”

1 个答案:

答案 0 :(得分:1)

没有ID为“ anonymous”的用户,因此您会收到错误消息。 AspNetUsers不包含ID为“匿名”的任何用户。除了使用不存在的Id值之外,这段代码没有任何问题。

就此问题而言,我的建议是创建一个匿名用户,获取其ID并将该ID绑定到所有应该匿名的帖子上。这样,所有匿名帖子都将具有相同的ID,但这无关紧要,因为无论如何它们都是匿名的。检查thisthis链接以获取有关如何通过代码优先的体系结构插入用户的更多信息