使用UserId作为FK时的内部异常

本文关键字:内部 异常 FK UserId 作为 使用 | 更新日期: 2023-09-27 18:13:03

这对你们中的一些人来说可能是一个简单的问题,但是我却很难解决它。

我有一个Message.cs类:

    public class Message : Audit
        {
            public int MessageId { get; set; }
            public string TextBody { get; set; }

            public string UserId { get; set; }
            [ForeignKey("UserId")]
            public virtual ApplicationUser User { get; set; }
        }

我正在使用实体框架有安全登录等。当我发布消息时,我设置了断点,以查看我发送的消息对象是否包含UserId,但是当db.SaveChanges();,则有错误:

" INSERT语句与外键约束冲突'"FK_dbo.Messages_dbo.AspNetUsers_ApplicationUser_Id'"。在数据库"aspnet-ChatApp-20140708035313",表"dbo"中发生冲突。AspNetUsers'",列'Id'。'r'n语句已终止。"

另外,我正在使用数据适配器和接口来处理我的api。我的MessageDataAdapter for POST看起来像这样:(编辑如下)

    public Models.Message PostMessage(Models.Message newMessage)
    {
        ApplicationUser user = new ApplicationUser();
        Message message = new Message();
        newMessage.TextBody = message.TextBody;
        newMessage.DateSent = DateTime.Now;
        newMessage.Hidden = message.Hidden;
        newMessage.UserId = user.Id;
        db.Messages.Add(newMessage);
        db.SaveChanges();
        return newMessage;
    }

当我设置一个断点时,newMessage包含必要的数据加上我登录时的UserId,因为我已经授权它,所以只有"Users"可以POST到DATABASE。然而,当它达到db。SaveChanges表示发生错误。

对于如何解决这个问题有什么想法吗?

谢谢!

编辑

这就是我所拥有的(我想我真正想要做的是能够POST消息,其中包含登录的用户id):

    public Models.Message PostMessage(Models.Message newMessage)
    {
        ApplicationUser user = new ApplicationUser();
        Message message = new Message();
        message.TextBody = newMessage.TextBody;
        message.DateSent = DateTime.Now;
        message.Hidden = newMessage.Hidden;
        message.UserId = newMessage.UserId;
        db.Messages.Add(message);
        db.SaveChanges();
        return message;
    }

我的前端HTML有一个输入类型隐藏的值是"User.Identity.GetUserId()",我想与消息一起发布。

使用UserId作为FK时的内部异常

为什么在发布消息时创建新用户?

从db中检索旧的。AspNetUsers(或db。用户?)。或者,如果确实需要创建新用户,那么还必须将user添加到db中。AspNetUsers repository - id只有在向存储库添加用户时才会生成。如果没有,那么用户。Id属性将是默认的-即整数类型为0。但是在AspNetUsers表中没有id=0的用户。