【问题标题】:association between entities - EntityFramework实体之间的关联 - EntityFramework
【发布时间】: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


【解决方案1】:

实体框架默认是惰性的,如果你在获取消息用户时尝试包含对话如何。即像这样的东西

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2018-07-29
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多