EF Core联表查询的一次坑

背景

使用EF Core 对一个一对多关系的表进行查询,通过多关联查询一的时候可以正常查询出结果,而反过来则就会一直出现sql错误。通过打印sql发现,是在进行LEFT JOIN 的时候外键字段名称在表中并不存在。

具体详情

因为实际中模型字段过多,以下为简化版本。

实体

有俩个实体,分别对应数据库中俩张表,分别为Person,Book,其关系是一个Person能够拥有多个Book,Entity代码如下。

public class Person
{
	public int Id {get;set;}
	public string Name {get;set;}
	public virtual ICollection<Book> Books {get;set;}
}

public class Book
{
	public int Id {get;set;}
	public string BookName {get;set;}
	public Person Person {get;set;}
	public int PersonId {get;set;
}

EF Core 关系配置

这里配置Book的关系即可以。

var b = builder.Entity<Book>();
b.HasOne(p => p.Person)
  .WithMany()
  .IsRequired()
  .HasForeignKey(p => p.PersonId);

查询

通过Book来关联查询Person,查询结果正常。

var books = await _repository.GetAll()
        .Include(x => x.Person)
        .ToListAsync();

通过Person关联查询Book,查出个人所拥有的全部书籍则会出现sql异常。

var results = await _repository.GetAll()
        .Include(x => x.Book)
        .ToListAsync();

此时控制台会出现 Unknown column ‘v0.PersonId1’ in 'field list’

解决

通过不断尝试,发现是在配置的时候WithMany()中对Book的关系,在其中加上p => p.Book即可更改后如下:

var b = builder.Entity<Book>();
b.HasOne(p => p.Person)
  .WithMany(p => p.Book)
  .IsRequired()
  .HasForeignKey(p => p.PersonId);
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值