我想通过 WCF 和实体框架设置一个简单的用户消息传递系统。我保持简单的想法:
一个用户可以向另一个用户发送消息。
背景:鲍勃给比尔发了一条消息。比尔给鲍勃发了一条消息。(未穿线)
在通过谷歌搜索大量阅读各种建议后,我做出了尝试。结果是两个类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:
我曾尝试使用 Sender 属性,例如。Sender.Name
但是我收到一个错误。我去查看数据库,发现这是正在生产的。请忽略指南相同的事实。