使用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()",我想与消息一起发布。
为什么在发布消息时创建新用户?
从db中检索旧的。AspNetUsers(或db。用户?)。或者,如果确实需要创建新用户,那么还必须将user添加到db中。AspNetUsers repository - id只有在向存储库添加用户时才会生成。如果没有,那么用户。Id属性将是默认的-即整数类型为0。但是在AspNetUsers表中没有id=0的用户。