首页 > 解决方案 > .Net core中查询PK表时如何获取FK表数据?

问题描述

spe_manuscript_num在表中有一个主键SPE_COMMON_DATA,它是其他表的 FK:

在此处输入图像描述

但是 .NET Core 模型是Scaffold-DbContext这样生成的:

public partial class SpeCommonData
{     
    public string SpeManuscriptNum { get; set; }
    ..
    ..
    public virtual ICollection<SpeAttachment> SpeAttachment { get; set; }
    public virtual ICollection<SpeMiscData> SpeMiscData { get; set; }
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
       modelBuilder.Entity<SpeCommonData>(entity =>
        {
               ....
               //nothing about FK tables
        }
        modelBuilder.Entity<SpeMiscData>(entity =>
        {
            entity.ToTable("SPE_MISC_DATA");

            entity.Property(e => e.Id)
                .HasColumnName("id")
                .HasColumnType("numeric(38, 0)")
                .ValueGeneratedOnAdd();

            entity.Property(e => e.SpeManuscriptNum)
                .IsRequired()
                .HasColumnName("spe_manuscript_num")
                .HasMaxLength(32)
                .IsUnicode(false);
             ....
            entity.HasOne(d => d.SpeManuscriptNumNavigation)
                .WithMany(p => p.SpeMiscData)
                .HasForeignKey(d => d.SpeManuscriptNum)
                .HasConstraintName("FK__SPE_MISC___spe_m__02084FDA");
        });
     modelBuilder.Entity<SpeAttachment>(entity =>
        {
            entity.HasKey(e => e.AttachmentId)
                .HasName("PK__SPE_ATTA__B74DF4E2D1989600");

            entity.ToTable("SPE_ATTACHMENT");

            entity.Property(e => e.AttachmentId).HasColumnName("attachment_id");
            ...
            entity.Property(e => e.SpeManuscriptNum)
                .HasColumnName("spe_manuscript_num")
                .HasMaxLength(32)
                .IsUnicode(false);

            entity.HasOne(d => d.SpeManuscriptNumNavigation)
                .WithMany(p => p.SpeAttachment)
                .HasForeignKey(d => d.SpeManuscriptNum)
                .HasConstraintName("FK__SPE_ATTAC__spe_m__3EA749C6");
        });

我的问题是,当我查询表时,SPE_COMMON_DATA我无法根据FK我不知道任何定义的内容来提取其他表数据modelBuilder.Entity<SpeCommonData>

查询时如何获取其他表数据SPE_COMMON_DATA,如 ORM 模型?

在此处输入图像描述

在此处输入图像描述

标签: c#.net-coreentity-framework-core

解决方案


您的实体应该引用具有 FK 关系的实体。然后在查询时您可以使用 EF 的 Include 方法,以便它也可以查询并返回 FK 表。

你能检查这个链接吗 docs.microsoft.com/en-us/ef/ef6/querying/related-data


推荐阅读