实体之间的关联 - EntityFramework

时间:2016-06-15 00:46:32

标签: c# entity-framework

我是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;的收集属性,为什么不建立反向关系?我的意思是,在我将实体添加到集合之后,该实体的集合属性还应该显示其中添加了对象的集合。

enter image description here

在上图中,添加到&#39;对话&#39;的实体的集合属性。表格有0&#39;对话&#39;对象。是应该这样做还是我做错了什么?

1 个答案:

答案 0 :(得分:2)

默认情况下,实体框架是惰性的,当您获取MessageUsers时尝试包含对话如何。就是这样的东西

List<MessageUser> ConnectedUsers = db.MessageUsers.Include(x=>x.Conversation)ToList()

正如你在评论中指出的那样,关联/映射都是好的,这是EF默认工作的方式(懒惰)。