これは一部の人にとっては単純な問題かもしれませんが、私はそれを解決するのに苦労しています.
私は 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()" という値で非表示の入力タイプがあります。