Linking Tables in Repository

From Logic Wiki
Jump to: navigation, search

Include / ThenInclude

 public Proposal GetProposal(long proposalId)
        {
            var retVal1 = _vdsContext.vds_Proposal
                .Include(k => k.VdsProposalSection)
                .ThenInclude(k => k.Section)
                .Include(k => k.VdsProposalSection)
                .ThenInclude(k => k.ProposalQuestion)
                .ThenInclude(k => k.Question)
                .ThenInclude(k => k.QuestionType)
                .Include(k => k.VdsProposalSection)
                .ThenInclude(k => k.ProposalQuestion)
                .ThenInclude(k => k.ProposalQuestionAnswer)
                .ThenInclude(k => k.PossibleAnswer)
                .Where(t => t.ProposalId == proposalId && t.IsDeleted == false);
                
            return retVal1.FirstOrDefault();
        }

Eliminating Soft Deletes

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Proposal>().HasQueryFilter(p => !p.IsDeleted);
            modelBuilder.Entity<ProposalQuestion>().HasQueryFilter(p => !p.IsDeleted);
            modelBuilder.Entity<ProposalQuestionAnswer>().HasQueryFilter(p => !p.IsDeleted);

            modelBuilder.Entity<Question>().HasQueryFilter(p => !p.IsDeleted);
            modelBuilder.Entity<QuestionType>().HasQueryFilter(p => !p.IsDeleted);
            modelBuilder.Entity<PossibleAnswer>().HasQueryFilter(p => !p.IsDeleted);
        }

Ignoring Query Filters

blogs = db.Blogs
    .Include(b => b.Posts)
    .IgnoreQueryFilters()
    .ToList();

See AutoMapper