c# - 如何使用 LINQ 和 EF Core 进行一对多
问题描述
在我的Place Repository中,我想带上所有Place
记录,包括Registration
每个记录的任何记录Place
,即使Registration
表中没有记录。
目前我有:
public IEnumerable<Place> Places
{
get
{
return _appDbContext.Places.Include(r => r.Registrations.Where(q => q.PlaceId == r.Id));
}
}
导致以下错误:
InvalidOperationException: LINQ 表达式 'DbSet() .Where(r => EF.Property(EntityShaperExpression: EntityType: Place ValueBufferExpression: ProjectionBindingExpression: Outer.Outer.Outer.Outer.Outer.Outer.Outer.Outer IsNullable: False , "Id" ) != null && object.Equals( objA: (object)EF.Property(EntityShaperExpression: EntityType: Place ValueBufferExpression: ProjectionBindingExpression: Outer.Outer.Outer.Outer.Outer.Outer.Outer.Outer IsNullable: False , "Id") , objB: (object)EF.Property(r, "PlaceId"))) .Where(r => r.PlaceId == r.Id)' 无法翻译。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。了解更多信息。
该模型:
public class Place
{
private const int _annualFiguresDueWithinDays = 90;
public int Id { get; set; }
[Required(ErrorMessage = "Please enter in the Place's name.")]
[MaxLength(100, ErrorMessage = "The maximum length for the place name is 100 characters.")]
public string PlaceName { get; set; }
public IEnumerable<Registration> Registrations { get; set; }
}
public class Registration
{
public int Id { get; set; }
[ForeignKey("PlaceId")]
public int PlaceId { get; set; }
public DateTime? RegistrationDate { get; set; }
public bool IsFirstRegistration { get; set; }
}
解决方案
只需将包含功能更改为此
public IEnumerable<Place> Places
{
get
{
return _appDbContext.Places.Include(r => r.Registrations));
}
}
推荐阅读
- python - 是否可以使用 GitLab CI 将文件写入您的机器(本地驱动器)?
- c++ - 并发非原子读/写是未定义的行为吗?
- r - 带有 R 的传单:标签中的数字格式和千位分隔符
- c# - 当“nwserver.exe”停止时,它不会在 c# 中启动第二个程序
- algorithm - 最大堆算法
- c++ - 处理远程通信的进程
- python - Why won't Google App Engine find my module (Python 3)?
- javascript - 如何将“选择所有数据选项卡目标”转换为 jquery?
- c - 将文件逐行拆分为单词数组
- python - 无法将系列转换为
?