.net 首先在实体框架代码中创建简单的用户消息传递设置
我想通过WCF和实体框架建立一个简单的用户消息传递系统。我的想法很简单: 用户可以向其他用户发送消息 上下文:鲍勃给比尔发了一条消息。比尔给鲍勃捎了个口信。(非螺纹) 在通过谷歌大量搜索阅读各种建议后,我做了一次尝试。结果是两个类.net 首先在实体框架代码中创建简单的用户消息传递设置,.net,wcf,entity-framework,.net,Wcf,Entity Framework,我想通过WCF和实体框架建立一个简单的用户消息传递系统。我的想法很简单: 用户可以向其他用户发送消息 上下文:鲍勃给比尔发了一条消息。比尔给鲍勃捎了个口信。(非螺纹) 在通过谷歌大量搜索阅读各种建议后,我做了一次尝试。结果是两个类User和Message 我越来越糊涂了。因此,我的问题是:我的实现是否有缺陷?如果有,是否有“更好”的实现方法 用户类 public class User { [Key, DatabaseGenerated(DatabaseGeneratedOption.Id
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();
}
messageRepository.GetMessagesFromUserByUserID(Guid.Parse(id)).ToList();
public IEnumerable GetMessagesFromUserByUserID(Guid userID)
{
返回context.Messages.Where(x=>x.SenderID==userID.ToList();
}
这一切都很好。问题是我想使用Sender Navigation属性来获取发件人的名称,这样当客户端获取消息时,他们就可以看到消息来自谁
我可以使用我的用户存储库,按用户ID查找用户,并将这两个结果结合起来——但这似乎违反直觉
最后,;我很抱歉不能用简洁的方式表达这一点,希望额外的信息能有所帮助
更新2:
我已尝试使用Sender属性,例如Sender.Name
,但收到一个错误。我去查看数据库,发现这是正在制作的。请忽略guid是相同的这一事实
感谢@Ladislav Mrnka确认了酒店的产权,这帮了大忙 所以我的回答是从另一个问题中得到启发的。我只需要向模型生成器添加一些细节,如下所示:
modelBuilder.Entity<Message>()
.HasRequired(m => m.Sender)
.WithMany(t => t.MessagesSent)
.HasForeignKey(m => m.SenderID)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Message>()
.HasRequired(m => m.Addressee)
.WithMany(t => t.MessagesReceived)
.HasForeignKey(m => m.AddresseeID)
.WillCascadeOnDelete(false);
modelBuilder.Entity()
.HasRequired(m=>m.Sender)
.WithMany(t=>t.MessagesSent)
.HasForeignKey(m=>m.SenderID)
.WillCascadeOnDelete(假);
modelBuilder.Entity()
.HasRequired(m=>m.收件人)
.WithMany(t=>t.messages接收)
.HasForeignKey(m=>m.AddresseeID)
.WillCascadeOnDelete(假);
这对我来说很好。这个问题更适合你。好吧,听起来我已经开始了。我的困惑已经转移到如何告诉EF,SentMessages
是UserID==SenderID的消息,类似于ReceivedMessages
。我认为这一切都与导航属性有关。我将为这个问题补充一些额外的细节。