嵌套包括在.net核心1.1
问题描述:
我有三个模型在.net核心1.1 MVC。嵌套包括在.net核心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;} }
-
消息
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; } }
用户
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对象中?
感谢您的帮助。
答
将两个用户类型的属性添加到消息表中,并使用它们分别将SenderId和ReceiverId上的关系定义到Users表。
public virtual Users Sender { get; set; }
public virtual Users Receiver { get; set; }
然后改变你这样的查询
_context.Communications.Include(c => c.Messages).Include("Message.Users");
嗨摩根。还有一个问题。我如何找到给定用户的所有通信? 例如我的信息有一个senderId和ReceiverId。 var communications = await _context.Communications.Include(c => c.Messages) .Where(m => m.Messages.senderId == id || m.Messages.ReceiverId == id).ToListAsync(); 这不是正确的语法。它应该是什么?谢谢 –
为什么不使用'ThenInclude'? –
我相信ThenInclude不是我的问题的正确解决方案。消息是一个icollection。我需要一种方法来查询icollection对象 –