c# - Entity Framework Core 2 没有急切加载包含的实体

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

我有一些代码要从 dotnetcore1.1 升级到 dotnetcore2.0(相应地将 EF core 从 1 升级到 2)

我有以下模型(当然是匿名的),并使用 Npgsql 与 postgres 数据库对话。

[Table("company")]
public class Company
{
  [Key, Column("id")]
  public int Id { get; set; }

  [Column("name", TypeName = "VARCHAR")]
  public string Name { get; set; }

  [Column("serialnumber")]
  public int SerialNumber { get; set; }

  [ForeignKey("serialnumber")]
  public virtual CompanyTypeMarker CompanyTypeMarker { get; set; }
}

[Table("companytypemarker")]
public class CompanyTypeMarker
{
    [Key, Column("serialnumber"), DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int SerialNumber { get; set; }

    [Column("sitetype")]
    public CompanyType CompanyType { get; set; } = CompanyType.Customer;
}

我有这个 LINQ 查询:

var company = await db.Companies
  .Include(c => c.CompanyTypeMarker)
  .FirstOrDefault(cc => cc.SerialNumber == serialNumber);

在 dotnetcore1.1 中,将加载 Company 实体,并且其关联的 CompanyTypeMarker 实体也将通过 Company.CompanyTypeMarker 加载和访问> 属性

在 dotnetcore2.0 中,Company 实体加载,但 Company.CompanyTypeMarker 实体为 null。

查看日志输出,EF core正在生成以下SQL:

  SELECT "c"."id", "c"."name", "c"."serialnumber", "c.CompanyTypeMarker"."serialnumber", "c.CompanyTypeMarker"."companytype"
  FROM "company" AS "c"
  INNER JOIN "companytypemarker" AS "c.CompanyTypeMarker" ON "c"."serialnumber" = "c.CompanyTypeMarker"."serialnumber"
  WHERE "c"."serialnumber" = @__SerialNumber_0
  LIMIT 1

生成的 SQL 证明 EF core 正在获取导航属性,因为它为正确的属性生成了正确的 sql JOIN...只是当它返回到 C# 时,由于某种原因它没有获取并填充连接的值。

有人可以帮忙吗?如前所述,这在 EF Core 1 中有效,而且看起来导航属性的使用相当标准

最佳答案

好吧,事实证明我的 OnModelCreating 中也有这个

modelBuilder
  .Entity<Company>(entity => {
    entity.HasOne(x => { x.CompanyTypeMarker).WithOne().OnDelete(DeleteBehavior.Restrict);
  })

我将其更改为 HasOne(...).WithMany() 并且它现在急切地正确加载

关于c# - Entity Framework Core 2 没有急切加载包含的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48554709/

相关文章:

.net - 关于 "Conflicting changes to the role"异常

c# - Entity Framework Code First 中的有效原始属性是什么?

c# - .NET Core 的 JPEG 解码器

asp.net-mvc - 在没有 AspNetCore Web 应用程序的情况下使用存储在 Razor 类库 3.0 (RCL) 中的 Razor 模板

c# - 为什么 IsCancellationRequested 在停止 .NET Core 3.1 中的 BackgroundService 时未设置为 true?

c# - Workflow Foundation 4 中的动态数据类型

c# - 将 C# WPF .NET 4.0 应用程序移植到 Mac OS X(Mono?)的建议

c# - 在代码中设置时 SelectedValue 不更新

c# - 在保存之前将 pdf 转换为 byte[]

c# - 理解枚举——用作常量