实体框架核心2.2子表查找为空

时间:2019-02-11 04:06:49

标签: c# entity-framework-core relationship

我有一个带有主表和子表的Entity Framework Core 2.2模型。所有表都具有一对一的关系。主表和子表均具有链接到同一查找表的字段。主表的链接与MainTable.NameLookup一起正常工作,该表显示了所有字段和数据。即使使用Include / ThenInclude,指向子表的链接也将导致空结果。因此,ChildTable.NameLookup存在,但为空。我希望我能清楚地陈述这一点。这是我在做什么的伪代码。

那么我想在框架中做什么呢?如果可以的话,我还缺少什么?

class MyContext : DbContext
{
    public virtual DbSet<MainTable> MainTable { get; set; }
    public virtual DbSet<ChildTable> ChildTable { get; set; }
    public virtual DbSet<NameLookup> NameLookup{ get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MainTable>()
            .HasOne(w => w.NameLookup)
            .WithOne(p => p.MainTable)
            .HasPrincipalKey<MainTable>(d => d.NameCode1)
            .HasForeignKey<NameLookup>(p => p.NameCode)
            .OnDelete(DeleteBehavior.Restrict);

        modelBuilder.Entity<ChildTable>()
            .HasOne(w => w.NameLookup)
            .WithOne(p => p.ChildTable)
            .HasPrincipalKey<ChildTable>(d => d.NameCode2)
            .HasForeignKey<NameLookup>(p => p.NameCode)
            .OnDelete(DeleteBehavior.Restrict);

        modelBuilder.Entity<ChildTable>()
            .HasOne(d => d.FileNumberNavigation)
            .WithOne(p => p.ChildTable)
            .HasForeignKey<ChildTable>(d => d.FileNumber);
    }
}

public class MainTable
{
    public string FileNumber { get; set; }
    public string NameCode1 { get; set; }

    public virtual ChildTable ChildTable { get; set; }
    public virtual NameLookup NameLookup { get; set; }
}

public class ChildTable
{
    public string FileNumber { get; set; }
    public string NameCode2 { get; set; }

    public virtual MainTable FileNumberNavigation { get; set; } 
    public virtual NameLookup NameLookup { get; set; }
}

public class NameLookup
{
    public string NameCode { get; set; }
    public string MoreInfo { get; set; }

    public virtual ChildTable ChildTable { get; set; }
    public virtual MainTable MainTable { get; set; }

}

这是针对winforms应用程序的。在应用程序中,我使用以下代码段检索MainTable dbSet:

        private readonly DbSet<MainTable > dbSetEntity;
        public MainTableRepository(DbContext dbContext) : base(dbContext)
        {
            base.dbContext = dbContext;
            dbSetEntity = dbContext.Set<MainTable >();
        }

        public MainTable GetMainTable(string FileNumber )
        {
            return dbSetEntity
                .Include(t => t.ChildTable)
                .ThenInclude(d => d.NameLookup)
                .SingleOrDefault(a => a.FileNumber == FileNumber);
        }

        public string GetMoreInfo (string FileNumber)
        {
            var q = from e in dbSetEntity
                where e.FileNumber == FileNumber
                select e.ChildTable.NameLookup.MoreInfo ;
            return q.FirstOrDefault();
        }

调用GetMainTable返回MainTable字段和数据,并且还包含MainTable.ChildTable字段和数据。但是MainTable.ChildTable.NameLookup为null。

如果我调用GetMoreInfo,它将从NameLookup.MoreInfo字段中返回字段数据。

0 个答案:

没有答案