我正在编写一个用于一般处理 Rest 的 API。我在加载依赖实体时遇到一些问题。我正在使用.Net-Core 2.0
我正在尝试抓取每次对话的最后一条消息。我有一种加载对话列表的方法,如下所示:
[HttpGet("Convo")]
public async Task<Conversation[]> LoadConversation()
{
var query = this._context.Conversations.OrderBy(x => x.Id);
var messages = await query.Select(x => x.Messages.OrderBy(m =>
m.Created).FirstOrDefault())
.ToArrayAsync();
var conversations = await query.ToArrayAsync();
return conversations;
}
当我检查消息时,我有一条对话 ID 为 3011 的消息, 当我检查对话时,我的 ID Loaded 为 3011。但是,对话。消息仍然是空的。
编辑 我还尝试使用匿名选择加载它们,但仍然没有映射
var convo = await query.Select(x => new {
Conversation = x,
Message = x.Messages.OrderBy(m => m.Created).FirstOrDefault()
}).ToArrayAsync();
注意
如果我包含所有消息,它们就会很好地映射
var conversationWithAllMessages = await query.Include(x => x.Messages).ToArrayAsync();
如果我对整个集合调用 SelectMany,它们也会起作用
var messages = query.SelectMany(x => x.Messages)
.OrderBy(x => x.ConversationId)
.ToArray();
但我只想包含最后一条消息
编辑
为什么我的实体没有映射,如何让我的实体正确映射?
最佳答案
您可以使用此语法强制包含
var query = this._context.Conversations.Include("Messages").OrderBy(x => x.Id);
关于c# - EF Core 加载实体未映射到查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49911242/