0

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

我有一个 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()”,我希望将其与消息一起发布。

4

1 回答 1

0

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

从 db.AspNetUsers(或 db.Users ?)中检索旧版本。或者如果确实需要创建新用户,那么您还必须将用户添加到 db.AspNetUsers 存储库 - 只有当您将用户添加到存储库时才会生成 ID。如果不是,则 user.Id 属性将是默认值 - 即整数类型为 0。但是 AspNetUsers 表中没有 id=0 的用户。这个错误说明了这一点。

于 2014-07-16T01:03:59.327 回答