c# - EF Core 加载实体未映射到查询

标签 c# linq .net-core entity-framework-core

我正在编写一个用于一般处理 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();

但我只想包含最后一条消息

编辑

enter image description here

为什么我的实体没有映射,如何让我的实体正确映射?

最佳答案

您可以使用此语法强制包含

var query = this._context.Conversations.Include("Messages").OrderBy(x => x.Id);

关于c# - EF Core 加载实体未映射到查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49911242/

相关文章:

c# - 为什么 Dapper 无法返回多个插入的行 ID?

C# Linq 完全外连接重复值

c# - 从字符串创建 lambda 表达式

c# - Lambda 表达式为列表中的每个不同值返回一个结果

c# - 表单 View 设计器无法在使用 C# .NET Core 3.1 的 Visual Studio 2019 中工作

c# - 如何创建一个多目标但针对每个框架不同的 dll 的 .NET Core 库?

asp.net-core - .NET Core 替代 ThreadPool.QueueUserWorkItem

c# - Json Ajax 参数传递和 Webmethod 未触发

c# - 了解获取和设置访问器

c# - 使用 LINQ 并行处理 csv