2017-10-20 136 views
0

我有三个模型在.net核心1.1 MVC。嵌套包括在.net核心1.1

  1. 通信

    public class Communication 
    { 
        public Guid CommunicationId { get; set; } 
        public string Subject { get; set; } 
        public bool IsRead { get; set; } = false; 
        public Guid UserId { get; set; } 
        public Guid AssignedTo { get; set; } 
        public DateTime CreatedAt { get; set; } = DateTime.Now; 
        public DateTime UpdatedAt { get; set; } = DateTime.Now; 
        public Nullable<DateTime> DeletedAt { get; set; } 
        public virtual ICollection<Message> Messages {get; set;} 
    } 
    
  2. 消息

    public class Message 
    { 
        public Guid MessageId { get; set; } 
        public Guid CommunicationId { get; set; } 
        public Guid SenderId { get; set; } = new Guid(); 
        public Guid ReceiverId { get; set; } = new Guid(); 
        public string Body { get; set; } 
        public DateTime CreatedAt { get; set; } = DateTime.Now; 
        public DateTime UpdatedAt { get; set; } = DateTime.Now; 
        public Nullable<DateTime> DeletedAt { get; set; } 
    } 
    
  3. 用户

Sender ID和ReceiverID在消息表是在用户表的用户ID。

这些模型之间的关系: 通信has_many消息。 消息belongs_to的通信 消息belongs_to的经由ReceiverId

这里经由SenderID 消息的用户blongs_to用户是我的控制器看起来像:

_context.Communications.Include(c=> c.Messages) 

我要生成这样的JSON对象: {communicationId :'xxx',messages [{messageId:'xxx',sender:{user info goes here},receiver:{user info goes here}}

如何将User对象包含到Message对象中?

感谢您的帮助。

回答

1

将两个用户类型的属性添加到消息表中,并使用它们分别将SenderId和ReceiverId上的关系定义到Users表。

public virtual Users Sender { get; set; } 
public virtual Users Receiver { get; set; } 

然后改变你这样的查询

_context.Communications.Include(c => c.Messages).Include("Message.Users"); 
+0

嗨摩根。还有一个问题。我如何找到给定用户的所有通信? 例如我的信息有一个senderId和ReceiverId。 var communications = await _context.Communications.Include(c => c.Messages) .Where(m => m.Messages.senderId == id || m.Messages.ReceiverId == id).ToListAsync(); 这不是正确的语法。它应该是什么?谢谢 –

+0

为什么不使用'ThenInclude'? –

+0

我相信ThenInclude不是我的问题的正确解决方案。消息是一个icollection。我需要一种方法来查询icollection对象 –