【问题标题】:The INSERT statement conflicted with the FOREIGN KEY with user Id (ASP Identity)INSERT 语句与具有用户 ID(ASP 身份)的 FOREIGN KEY 冲突
【发布时间】:2023-03-17 21:33:01
【问题描述】:

我正在开发一个允许用户通过表单提交帖子的功能,它成功地从 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 数据包管理器上更新数据库时,我收到以下错误

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

【问题讨论】:

  • 我的猜测是没有 ID 为“匿名”的用户,因此您会收到错误消息。尝试使用任何随机整数 ID 而不是“匿名”,如果没有具有该随机 ID 的用户,您应该会得到相同的错误。
  • 错误很明显——AspNetUsers 不包含任何ID 是匿名的用户。除了使用不存在的Id 值之外,这段代码没有任何问题。
  • 那个 FOREIGN KEY 约束会让我相信 Post 上有一个 FK 强制执行约束,即用户从 AspNetUsers 表中发布帖子。也许您在匿名发帖时需要冒充 AspNetUser。
  • @zadders 我的建议是创建一个匿名用户,获取他的 ID 并将该 ID 绑定到所有应该匿名的帖子。所有匿名帖子都将具有相同的 ID,但这无关紧要,因为它们无论如何都是匿名的。
  • @Matt 我意识到与 departmentId 也存在冲突,但是一旦我更改它就一切正常 :D 非常感谢您的耐心和帮助

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


【解决方案1】:

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

就这个问题而言,我的建议是创建一个匿名用户,获取他的 ID 并将该 ID 绑定到所有应该匿名的帖子。所有匿名帖子都将具有相同的 ID,但这无关紧要,因为它们无论如何都是匿名的。查看thisthis 链接,了解如何通过代码优先架构插入用户

【讨论】:

  • 完美总结讨论,感谢matt的帮助:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
相关资源
最近更新 更多