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 は次のようになります: (EDITTED LOOK BELOW)

    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 には、メッセージと共に POST したい "User.Identity.GetUserId()" という値で非表示の入力タイプがあります。

4

1 に答える 1