WCFとEntityFrameworkを介して簡単なユーザーメッセージングシステムをセットアップしたいと思います。私はアイデアをシンプルに保っています:
ユーザーは別のユーザーにメッセージを送信できます。
コンテキスト:ボブはビルにメッセージを送信しました。ビルはボブにメッセージを送りました。(スレッド化されていません)
グーグルでいろいろなアドバイスをよく読んでみました。結果は2つのクラスUser
とMessage
です。
私はかなり混乱/行き詰まっています。したがって、私の質問は次のとおりです。私の実装には欠陥がありますか?もしそうなら、これを実装するための「より良い」方法はありますか?
ユーザークラス
public class User
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid UserID { get; set; }
public string Name { get; set; }
public ICollection<Message> SentMessages { get; set; }
public ICollection<Message> ReceivedMessages { get; set; }
}
メッセージクラス
public class Message
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid MessageID { get; set; }
public DateTime CreatedOn { get; set; }
public string Content { get; set; }
public Guid SenderID { get; set; }
public virtual User Sender { get; set; }
public Guid AddresseeID { get; set; }
public virtual User Addressee{ get; set; }
}
更新/編集:
説明をわかりやすくするために、質問に詳細を追加したいと思います。
リポジトリパターンを実装しました。したがって、上記のクラスを使用すると、ユーザーが送信したすべてのメッセージを簡単に取得できます。例えば
messageRepository.GetMessagesFromUserByUserID(Guid.Parse(id)).ToList();
public IEnumerable<Message> GetMessagesFromUserByUserID(Guid userID)
{
return context.Messages.Where(x => x.SenderID == userID).ToList();
}
これはすべて問題ありません。問題は、Senderナビゲーションプロパティを使用して送信者の名前を取得したいので、クライアントがメッセージを受信すると、送信者を確認できることです。
ユーザーリポジトリを使用し、UserIDでユーザーを検索し、2つの結果を組み合わせることができますが、これは直感に反しているようです。
ついに; これを簡潔に表現できなかったことをお詫びし、追加情報がお役に立てば幸いです。
アップデート2:
Senderプロパティを使用しようとしました。Sender.Name
ただし、エラーが発生します。DBを調べたところ、これが作成されていることがわかりました。ガイドが同じであるという事実を無視してください。