我是EF的初学者,虽然我之前成功使用过它,但我无法理解我现在面临的一个简单问题。
我的项目中有以下表格。
MessageUser表
public MessageUser()
{
this.Conversation = new HashSet<Conversation>();
}
public int MessageUserID { get; set; }
public string ConnectionID { get; set; }
public string UserName { get; set; }
public ICollection<Conversation> Conversation { get; set; }
ChatMessage表
public class ChatMessage
{
public int ChatMessageID { get; set; }
public string Username { get; set; }
public string Message { get; set; }
public bool DeliveryStatus { get; set; }
public DateTime CreatedAt { get; set; }
public int ConversationID { get; set; }
[ForeignKey("ConversationID")]
public Conversation Conversation { get; set; }
}
对话表
public class Conversation
{
public Conversation()
{
ChatMessages = new List<ChatMessage>();
MessageUsers = new List<MessageUser>();
}
public int ConversationID { get; set; }
public DateTime CreatedAt { get; set; }
public ICollection<MessageUser> MessageUsers { get; set; }
public ICollection<ChatMessage> ChatMessages { get; set; }
}
&#39; ChatMessage&#39;表和&#39;对话&#39;表格有一对多的关系而“对话”#39;和&#39; MessageUser&#39;有很多关系。 我试图按如下方式保存数据:
DataModel db = new DataModel();
List<MessageUser> ConnectedUsers = db.MessageUsers.ToList();
ChatMessage message = new ChatMessage { CreatedAt = DateTime.Now, DeliveryStatus = true, Message = "Hello My name is Mujtaba", Username = "Mujtaba" };
Conversation conversation = new Conversation();
conversation.ChatMessages.Add(message);
conversation.CreatedAt = DateTime.Now;
foreach (var user in ConnectedUsers)
{
conversation.MessageUsers.Add(user);
}
我想要了解的是,当我添加“消息用户”时,对于&#39; Conversation&#39;的收集属性,为什么不建立反向关系?我的意思是,在我将实体添加到集合之后,该实体的集合属性还应该显示其中添加了对象的集合。
在上图中,添加到&#39;对话&#39;的实体的集合属性。表格有0&#39;对话&#39;对象。是应该这样做还是我做错了什么?
答案 0 :(得分:2)
默认情况下,实体框架是惰性的,当您获取MessageUsers时尝试包含对话如何。就是这样的东西
List<MessageUser> ConnectedUsers = db.MessageUsers.Include(x=>x.Conversation)ToList()
正如你在评论中指出的那样,关联/映射都是好的,这是EF默认工作的方式(懒惰)。