【发布时间】:2022-07-12 16:23:09
【问题描述】:
为什么要关注单个实体查询
this.DbContext.MaterialInfo.FirstOrDefault(m => m.KódMateriálu == "001");
生成 INNER JOIN?
SELECT TOP(1) [m].[MaterialCode], [m].[Id]
FROM [Material] AS [m]
INNER JOIN [Material] AS [m0] ON [m].[MaterialCode] = [m0].[MaterialCode]
WHERE [m].[Id] IS NOT NULL AND ([m].[MaterialCode] = N'001')
这里是实体配置:
public class MaterialInfoConfiguration : IEntityTypeConfiguration<MaterialInfo>
{
public void Configure(EntityTypeBuilder<MaterialInfo> entity)
{
entity.ToTable("Material");
entity.HasKey(e => e.MaterialCode);
entity.Property(e => e.Id).HasColumnName("ID"); //legacy column, no longer a PK, but still and IdenityColumn
entity.HasOne<Material>() //maps to the same table
.WithOne()
.IsRequired(false)
.HasForeignKey<MaterialInfo>(e => e.MaterialCode)
.HasPrincipalKey<Material>(e => e.MaterialCode)
.HasConstraintName("FK_MaterialInfo_Material_MaterialCode");
}
}
【问题讨论】:
-
我猜是因为在您的定义中是
HasOne,所以内部连接是为了确保您的记录确实有一个匹配的记录。否则你可能会返回一条没有匹配记录的记录 -
"否则你可能会返回一条没有匹配记录的记录" > 但是 EF 为什么要关心呢?
-
我在这里几乎是在猜测,但我认为是 HasOne、WithOne 等的组合迫使它确保始终有匹配的记录。
标签: c# sql entity-framework-core .net-6.0