对于你们中的一些人来说,这可能是一个简单的问题,但我很难尝试解决它。
我有一个 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 语句与 FOREIGN KEY 约束 \"FK_dbo.Messages_dbo.AspNetUsers_ApplicationUser_Id\" 冲突。冲突发生在数据库 \"aspnet-ChatApp-20140708035313\"、表 \"dbo.AspNetUsers\"、列 'Id' 中。\ r\n语句已终止。"
此外,我正在使用数据适配器和接口来处理我的 API。我用于 POST 的 MessageDataAdapter 如下所示:(编辑如下)
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,因为我已经对其进行了授权,因此只有“用户”可以 POST 到数据库。但是,当它到达 db.SaveChanges 时,就会发生该错误。
关于如何解决这个问题的任何想法?
谢谢!
编辑
这就是我所拥有的(我想我真正想做的是能够发布包含登录用户的 UserId 的消息):
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()”,我希望将其与消息一起发布。