【发布时间】:2021-01-06 09:14:09
【问题描述】:
完整的异常消息:
不能隐式转换类型 'System.Collections.Generic.List>'到 'System.Collections.Generic.IList
'。 存在显式转换(您是否缺少演员表?) [Schedular.API]
public async Task<IList<TaskSchedule>> GetTaskSchedulesByUser(int UserId)
{
var userTaskSchedule = await _context.TaskSchedules
.Join(_context.Notes,
schedule => schedule.Id,
note => note.Id,
(schedule, note) => new { schedule, note })
.Where(u => u.schedule.userId == UserId)
.ToListAsync();
return userTaskSchedule;
}
我相信方法的返回类型需要改变,但我不确定是什么。
型号
父表 = taskSchedule
子表 = 笔记
笔记模型
public class Note
{
public int Id { get; set; }
public string NotesInfo { get; set; }
public DateTime dateCreated {get; set;}
public TaskSchedule taskSchedule {get; set;}
public User user { get; set; }
public int userId { get; set; }
}
任务调度模型
public class TaskSchedule
{
public int Id { get; set; }
public string Title { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public User user { get; set; }
public int userId { get; set; }
}
【问题讨论】:
-
这是什么味道的ORM?我不确定您是否需要加入。从方法签名来看,您可能只想要
return await _context.TaskSchedules.Where(u => u.schedule.userId == UserId).ToListAsync()。如果你也想返回笔记,并且在TaskSchedule中没有地方可以保存笔记,你需要修改方法返回类型 -
ORM = Entityframework 我需要注释,因为它在单独的表上。 “Taskschedule”与“Note”有一对多的关系。我应该能够在“任务计划”中添加尽可能多的注释。您编写的代码最初是我的代码,它可以工作,但是我无法查看注释。有没有办法把它加入到笔记表中?
-
我可以请求你用它标记你的问题版本(以及它是否是核心/不是),例如用
efcore和efcore-3.1标记。 TaskSchedule 是否对笔记有 nav 属性?包含实体类及其映射配置时,EF 问题通常更容易回答 -
错误很明显。 JOIN 创建了一个不匹配的新匿名类型,它结合了 TaskSchedule 和 doesn't 匹配返回类型的 Note。如果您不想返回这两种类型,为什么要加入 Notes?
-
此外,JOIN 是由 ORM 根据实体之间的关系生成的。如果您必须显式使用 JOIN,则非常强烈地表明模型和实体是错误的。 TaskSchedule 应该有一个 Note 或 Notes 属性
标签: c# linq entity-framework-core asp.net-core-3.1 ef-core-3.1