【发布时间】:2016-06-15 00:46:32
【问题描述】:
我是 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; }
}
“ChatMessage”表和“Conversation”表具有一对多关系,而“Conversation”和“MessageUser”具有多对多关系。 我正在尝试按如下方式保存数据:
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);
}
我想了解的是,当我将“MessageUser”添加到“Conversation”的集合属性时,为什么没有建立反比关系?我的意思是,在我将实体添加到集合后,该实体的集合属性也应该显示它的集合中添加的对象。
在上图中,添加到“对话”表中的实体的集合属性有 0 个“对话”对象。应该是这样还是我做错了什么?
【问题讨论】:
-
实体框架默认是惰性的,在获取消息用户时尝试包含对话如何。即类似这样的 List
ConnectedUsers = db.MessageUsers.Include(x=>x.Conversation)ToList(); -
哦,是的,这行得通:) 关联是在将对象保存到数据库后设置的。尽管关联是否被反映并不重要。但是感谢您的帮助:) 请务必写在下面的评论中,以便我将其标记为正确答案。
标签: c# entity-framework