Entity Framework Core 2.2 Поиск дочерней таблицы равен нулю - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть модель Entity Framework Core 2.2 с основными и дочерними таблицами.Все таблицы имеют отношение один к одному.Обе таблицы Master и Child имеют поля, которые связаны с одной и той же таблицей поиска.Ссылка на главную таблицу работает, как и ожидалось, с MainTable.NameLookup, показывая все поля и данные.Ссылка на дочернюю таблицу приводит к нулевому результату даже с Include / ThenInclude.Таким образом, ChildTable.NameLookup существует, но имеет значение null.Я надеюсь, что я представляю это ясно.Вот псевдокод того, что я делаю.

Так что же я пытаюсь сделать доступным в рамках, и если да, то чего мне не хватает?

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.

...