diff --git a/IRaCIS.Core.Application/Service/Doctor/TrialExperienceService.cs b/IRaCIS.Core.Application/Service/Doctor/TrialExperienceService.cs index 9b078cc88..16a7a2ee1 100644 --- a/IRaCIS.Core.Application/Service/Doctor/TrialExperienceService.cs +++ b/IRaCIS.Core.Application/Service/Doctor/TrialExperienceService.cs @@ -7,27 +7,23 @@ namespace IRaCIS.Application.Services [ApiExplorerSettings(GroupName = "Reviewer")] public class TrialExperienceService : BaseService, ITrialExperienceService { - //private readonly IRepository _trialExperienceRepository; - //private readonly IRepository _doctorRepository; - //private readonly IRepository _attachmentRepository; - //private readonly IRepository _trialExperienceCriteriaRepository; + private readonly IRepository _trialExperienceRepository; + private readonly IRepository _doctorRepository; + private readonly IRepository _attachmentRepository; + private readonly IRepository _trialExperienceCriteriaRepository; - - //public TrialExperienceService(IRepository trialExperienceRepository, IRepository doctorRepository, IRepository attachmentRepository, - // IRepository trialExperienceCriteriaRepository) - //{ - // _trialExperienceRepository = trialExperienceRepository; - // _doctorRepository = doctorRepository; - // _attachmentRepository = attachmentRepository; - // _trialExperienceCriteriaRepository = trialExperienceCriteriaRepository; - - //} - private IQueryable _doctor => _repository.GetQueryable(); - private IQueryable _attachment => _repository.GetQueryable(); - private IQueryable _trialExperience => _repository.GetQueryable(); - private IQueryable _trialExperienceCriteria => _repository.GetQueryable(); + public TrialExperienceService(IRepository trialExperienceRepository, IRepository doctorRepository, IRepository attachmentRepository, + IRepository trialExperienceCriteriaRepository) + { + _trialExperienceRepository = trialExperienceRepository; + _doctorRepository = doctorRepository; + _attachmentRepository = attachmentRepository; + _trialExperienceCriteriaRepository = trialExperienceCriteriaRepository; + + } + /// /// 根据医生Id,获取临床试验经历 界面所有数据 @@ -37,7 +33,7 @@ namespace IRaCIS.Application.Services { var trialExperience = new TrialExperienceModel(); - var doctor = await _doctor.Where(o => o.Id == doctorId) + var doctor = await _doctorRepository.Where(o => o.Id == doctorId) .ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); trialExperience.ClinicalTrialExperienceList = await GetTrialExperienceList(doctorId); @@ -48,7 +44,7 @@ namespace IRaCIS.Application.Services trialExperience.Id = doctor.Id; trialExperience.OtherClinicalExperience = doctor.OtherClinicalExperience ?? ""; trialExperience.OtherClinicalExperienceCN = doctor.OtherClinicalExperienceCN ?? ""; - var attachment = await _attachment.FirstOrDefaultAsync(t => t.Id == doctor.GCPId); + var attachment = await _attachmentRepository.FirstOrDefaultAsync(t => t.Id == doctor.GCPId); if (attachment != null) { trialExperience.ExpiryDateStr = attachment.ExpiryDate == null ? "" : attachment.ExpiryDate.Value.ToString("yyyy-MM-dd HH:mm"); @@ -66,7 +62,7 @@ namespace IRaCIS.Application.Services private async Task> GetTrialExperienceList(Guid doctorId) { - var doctorClinicalTrialExperienceList = await _trialExperience.Where(o => o.DoctorId == doctorId).OrderBy(t => t.CreateTime) + var doctorClinicalTrialExperienceList = await _trialExperienceRepository.Where(o => o.DoctorId == doctorId).OrderBy(t => t.CreateTime) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); return doctorClinicalTrialExperienceList; @@ -101,7 +97,7 @@ namespace IRaCIS.Application.Services } else { - var needUpdate = await _trialExperience.FirstOrDefaultAsync(t => t.Id == trialExperienceViewModel.Id); + var needUpdate = await _trialExperienceRepository.FirstOrDefaultAsync(t => t.Id == trialExperienceViewModel.Id); if (needUpdate == null) return Null404NotFound(needUpdate); diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs index f3ec3d595..5a9d3fe7c 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs @@ -175,7 +175,7 @@ namespace IRaCIS.Core.Application.Contracts } var lockedLastSurvey = await _trialSiteSurveyRepository.Where(t => (t.Email == userInfo.ReplaceUserEmailOrPhone || t.Phone == userInfo.ReplaceUserEmailOrPhone) && t.SiteId == userInfo.SiteId && t.TrialId == userInfo.TrialId && t.State == TrialSiteSurveyEnum.PMCreatedAndLock == true) - .Include(u => u.TrialSiteEquipmentSurveyList).Include(u => u.TrialSiteUserSurveyList).OrderByDescending(t => t.CreateTime).FirstOrDefaultAsync().IfNullThrowConvertException(); + .Include(u => u.TrialSiteEquipmentSurveyList).Include(u => u.TrialSiteUserSurveyList).OrderByDescending(t => t.CreateTime).FirstOrDefaultAsync().IfNullThrowException(); //Copy 一份 更换邮箱 @@ -622,7 +622,7 @@ namespace IRaCIS.Core.Application.Contracts public async Task AbandonSiteSurvey(Guid trialSiteSurveyId) { - var survey = (await _trialSiteSurveyRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurveyId, true)).IfNullThrowConvertException(); + var survey = (await _trialSiteSurveyRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurveyId, true)).IfNullThrowException(); if (survey.State != TrialSiteSurveyEnum.ToSubmit) { diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs index b5c14e726..c80a0cec3 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs @@ -116,7 +116,7 @@ namespace IRaCIS.Application.Services [HttpGet("{trialId:guid}")] public async Task GetTrialExpeditedState(Guid trialId) { - var trial = await _trialRepository.FirstOrDefaultAsync(u => u.Id == trialId).IfNullThrowConvertException(); + var trial = (await _trialRepository.FirstOrDefaultAsync(u => u.Id == trialId)).IfNullThrowException(); return trial.Expedited; } diff --git a/IRaCIS.Core.Infra.EFCore/Repository/ICommandRepository.cs b/IRaCIS.Core.Infra.EFCore/Repository/ICommandRepository.cs index 9006db72c..e8e1c940b 100644 --- a/IRaCIS.Core.Infra.EFCore/Repository/ICommandRepository.cs +++ b/IRaCIS.Core.Infra.EFCore/Repository/ICommandRepository.cs @@ -87,6 +87,20 @@ namespace IRaCIS.Core.Infra.EFCore EntityEntry Entry(TEntity t); + /// + ///不跟踪 查询单个实体,不会出现NUll + /// + /// + /// + /// + Task FirstAsync(Expression> exp = null, bool isTracking = false); + + /// + ///跟踪 查询单个实体,会出现NUll + /// + /// + /// + /// Task FirstOrDefaultAsync(Expression> exp = null, bool ignoreQueryFilters = false); Task FirstOrDefaultNoTrackingAsync(Expression> exp = null, bool ignoreQueryFilters = false); @@ -97,14 +111,9 @@ namespace IRaCIS.Core.Infra.EFCore Task CountAsync(Expression> whereLambda = null, bool ignoreQueryFilters = false); - ValueTask AddAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default, bool isSaveAudit = false); - - Task> AddRangeAsync(IEnumerable entities, bool isSaveAudit = false); - - //Task AddRangeAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default); - // 不建议使用,使用跟踪,然后save 部分字段更新,此种方式是更新所有字段 - //Task UpdateAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default); + ValueTask AddAsync(TEntity entity, bool autoSave = false); + Task> AddRangeAsync(IEnumerable entities, bool autoSave = false); Task SaveChangesAsync(CancellationToken cancellationToken = default); Task DeleteAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default); diff --git a/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs b/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs index 3163070f3..83b95d08c 100644 --- a/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs +++ b/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs @@ -13,19 +13,10 @@ using System.Linq.Expressions; using System.Threading.Tasks; using EFCore.BulkExtensions; using IRaCIS.Core.Domain.Share; -using IRaCIS.Core.Infra.EFCore.Common.Dto; using System.Reflection; namespace IRaCIS.Core.Infra.EFCore { - public interface IRepository : ICommandRepository, IQueryRepository where TEntity : Entity - { - IRaCISDBContext _dbContext { get; set; } - - - } - - #region 泛型通用版本 @@ -34,16 +25,12 @@ namespace IRaCIS.Core.Infra.EFCore { IQueryable GetQueryable(bool isTraking = false) where T : Entity; DbSet Set() where T : Entity; + EntityEntry Entry(T t) where T : Entity; + + Task SaveChangesAsync(); IQueryable WhereIf(bool condition, Expression> filter) where T : Entity; - Task InsertOrUpdateAsync(TFrom from, bool autoSave = false, params EntityVerifyExp[] verify) where T : Entity; - - Task InsertFromDTOAsync(TFrom from, bool autoSave = false, params EntityVerifyExp[] verify) where T : Entity; - - Task UpdateFromDTOAsync(TFrom from, bool autoSave = false, bool ignoreDtoNullProperty = true, params EntityVerifyExp[] verify) where T : Entity; - - EntityEntry Entry(T t) where T : Entity; Task AnyAsync(Expression> filter, bool ignoreQueryFilters = false) where T : Entity; @@ -54,6 +41,16 @@ namespace IRaCIS.Core.Infra.EFCore ValueTask FindAsync(Guid id) where T : Entity; + + + Task InsertOrUpdateAsync(TFrom from, bool autoSave = false, params EntityVerifyExp[] verify) where T : Entity; + + Task InsertFromDTOAsync(TFrom from, bool autoSave = false, params EntityVerifyExp[] verify) where T : Entity; + + Task UpdateFromDTOAsync(TFrom from, bool autoSave = false, bool ignoreDtoNullProperty = true, params EntityVerifyExp[] verify) where T : Entity; + + + ValueTask AddAsync(T entity, bool autoSave = false) where T : Entity; Task UpdateRange(IEnumerable entities, bool autoSave = false) where T : Entity; @@ -63,9 +60,6 @@ namespace IRaCIS.Core.Infra.EFCore Task DeleteAsync(T entity, bool autoSave = false) where T : Entity; - //Task DeleteManyAsync(IEnumerable entities, bool autoSave = false) where T : Entity; - - Task SaveChangesAsync(); Task BatchDeleteAsync(Expression> deleteFilter) where T : Entity; @@ -78,10 +72,8 @@ namespace IRaCIS.Core.Infra.EFCore public class Repository : IRepository { + #region 构造 基本 private IRaCISDBContext _dbContext { get; } - - - public IMapper _mapper { get; set; } public IUserInfo _userInfo { get; set; } @@ -99,7 +91,7 @@ namespace IRaCIS.Core.Infra.EFCore /// /// /// - + public IQueryable GetQueryable(bool isTraking = false) where T : Entity { IQueryable query = _dbContext.Set(); @@ -115,12 +107,39 @@ namespace IRaCIS.Core.Infra.EFCore return _dbContext.Set(); } + public EntityEntry Entry(T t) where T : Entity + { + return _dbContext.Entry(t); + } public IQueryable WhereIf(bool condition, Expression> filter) where T : Entity { IQueryable query = _dbContext.Set().AsNoTracking(); return condition ? query.Where(filter) : query; } + private async Task SaveChangesAsync(bool autoSave) + { + if (autoSave) + { + return await SaveChangesAsync(); + } + else + { + return false; + } + } + + public async Task SaveChangesAsync() + { + + return await _dbContext.SaveChangesAsync().ConfigureAwait(false) > 0; + + } + + #endregion + + + private async Task EntityVerifyAsync(bool isAdd, EntityVerifyExp[] verify, Guid? entitydId = null) where T : Entity { @@ -129,7 +148,7 @@ namespace IRaCIS.Core.Infra.EFCore { foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyUpdate && t.IsVerify)) { - if (await _dbContext.Set().IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false)) + if (await _dbContext.Set().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false)) { throw new BusinessValidationFailedException(verifyItem.VerifyMsg); } @@ -141,14 +160,14 @@ namespace IRaCIS.Core.Infra.EFCore { if (verifyItem.verifyType == VerifyEnum.OnlyUpdate) { - if (await _dbContext.Set().IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false)) + if (await _dbContext.Set().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false)) { throw new BusinessValidationFailedException(verifyItem.VerifyMsg); } } else if (verifyItem.verifyType == VerifyEnum.Both) { - if (await _dbContext.Set().IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp.And(t => t.Id != entitydId)).ConfigureAwait(false)) + if (await _dbContext.Set().AnyAsync(verifyItem.VerifyExp.And(t => t.Id != entitydId)).ConfigureAwait(false)) { throw new BusinessValidationFailedException(verifyItem.VerifyMsg); } @@ -166,7 +185,6 @@ namespace IRaCIS.Core.Infra.EFCore await EntityVerifyAsync(true, verify); - entity = await AddAsync(entity, autoSave); @@ -214,18 +232,6 @@ namespace IRaCIS.Core.Infra.EFCore } - private async Task SaveChangesAsync(bool autoSave) - { - if (autoSave) - { - return await SaveChangesAsync(); - } - else - { - return false; - } - } - public async Task InsertOrUpdateAsync(TFrom from, bool autoSave = false, params EntityVerifyExp[] verify) where T : Entity { @@ -242,10 +248,7 @@ namespace IRaCIS.Core.Infra.EFCore } } - public EntityEntry Entry(T t) where T : Entity - { - return _dbContext.Entry(t); - } + public async Task AnyAsync(Expression> filter, bool ignoreQueryFilters = false) where T : Entity { @@ -261,7 +264,7 @@ namespace IRaCIS.Core.Infra.EFCore } - + #region 基本查询 异步 @@ -368,39 +371,22 @@ namespace IRaCIS.Core.Infra.EFCore { await _dbContext.Set().AddRangeAsync(entities).ConfigureAwait(false); - if (autoSave) - { - return await SaveChangesAsync(); - } - else - { - return false; - } + return await SaveChangesAsync(autoSave); } public async Task UpdateRange(IEnumerable entities, bool autoSave = false) where T : Entity { _dbContext.Set().UpdateRange(entities); - if (autoSave) - { - await SaveChangesAsync(); - } - + await SaveChangesAsync(autoSave); + } public async Task UpdateAsync(T entity, bool autoSave = false) where T : Entity { _dbContext.Set().Update(entity); - if (autoSave) - { - return await SaveChangesAsync(); - } - else - { - return false; - } + return await SaveChangesAsync(autoSave); } @@ -408,36 +394,19 @@ namespace IRaCIS.Core.Infra.EFCore { _dbContext.Set().Remove(entity); - if (autoSave) - { - return await SaveChangesAsync(); - } - else - { - return false; - } + return await SaveChangesAsync(autoSave); + } public async Task DeleteManyAsync(IEnumerable entities, bool autoSave = false) where T : Entity { _dbContext.Set().RemoveRange(entities); - if (autoSave) - { - return await SaveChangesAsync(); - } - else - { - return false; - } + return await SaveChangesAsync(autoSave); } - public async Task SaveChangesAsync() - { - return await _dbContext.SaveChangesAsync().ConfigureAwait(false) > 0; - } #endregion diff --git a/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs b/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs index 3725618ce..e08eeb0e4 100644 --- a/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs +++ b/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs @@ -14,13 +14,15 @@ using EFCore.BulkExtensions; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Infrastructure.Extention; -using Microsoft.Data.SqlClient; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using IRaCIS.Core.Infra.EFCore.Common.Dto; - namespace IRaCIS.Core.Infra.EFCore { + public interface IRepository : ICommandRepository, IQueryRepository where TEntity : Entity + { + IRaCISDBContext _dbContext { get; set; } + + } + + public class Repository : IRepository where TEntity : Entity, new() { @@ -42,29 +44,23 @@ namespace IRaCIS.Core.Infra.EFCore #region 异步 EF 跟踪 添加 - public async Task> AddRangeAsync(IEnumerable entities, bool isSaveAudit = false) + public async Task> AddRangeAsync(IEnumerable entities, bool autoSave = false) { - foreach (var addEntity in entities) - { - await AddAsync(addEntity, isSaveAudit); - } + + await _dbSet.AddRangeAsync(entities).ConfigureAwait(false); + + await SaveChangesAsync(autoSave); return entities; } /// EF跟踪方式 添加 - public async ValueTask AddAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default, bool isSaveAudit = false) + public async ValueTask AddAsync(TEntity entity, bool autoSave = false) { await _dbSet.AddAsync(entity).ConfigureAwait(false); - // 添加稽查 - //await AddInspectionAsync(entity, isSaveAudit); - - if (autoSave) - { - await SaveChangesAsync(cancellationToken); - } + await SaveChangesAsync(autoSave); return entity; } @@ -73,10 +69,10 @@ namespace IRaCIS.Core.Infra.EFCore public async Task InsertFromDTOAsync(TFrom from, bool autoSave = false, params EntityVerifyExp[] verify) { - var entity = _mapper.Map(from); await EntityVerifyAsync(true, verify); + var entity = _mapper.Map(from); entity = await AddAsync(entity, autoSave); @@ -338,11 +334,7 @@ namespace IRaCIS.Core.Infra.EFCore var query = ignoreQueryFilter ? _dbSet.AsNoTracking().IgnoreQueryFilters() : _dbSet.AsNoTracking(); var waitDeleteList = await query.Where(deleteFilter).ToListAsync(); - foreach (var deleteItem in waitDeleteList) - { - await DeleteAsync(deleteItem, false); - } - + _dbSet.RemoveRange(waitDeleteList); await SaveChangesAsync(autoSave); return waitDeleteList; @@ -352,11 +344,11 @@ namespace IRaCIS.Core.Infra.EFCore public async Task> SoftDeleteFromQueryAsync(Expression> deleteFilter, bool autoSave = false, bool ignoreQueryFilter = false) { var query = ignoreQueryFilter ? _dbSet.IgnoreQueryFilters() : _dbSet; - var waitDeleteList = await query.Where(deleteFilter).ToListAsync(); - + var waitDeleteList = await query.Where(deleteFilter).ToListAsync(); + foreach (var deleteItem in waitDeleteList) { - if(deleteItem is ISoftDelete softDeleteItem) + if (deleteItem is ISoftDelete softDeleteItem) { softDeleteItem.IsDeleted = true; } @@ -618,6 +610,30 @@ namespace IRaCIS.Core.Infra.EFCore return await _dbContext.FindAsync(keyValues); } + + public async Task FirstAsync(Expression> exp = null, bool isTracking = false) + { + + var query = _dbSet.AsQueryable(); + + if (!isTracking) + { + query = query.AsNoTracking(); + } + + var entity = await query.FirstOrDefaultAsync(); + + if (entity is null) + { + throw new QueryBusinessObjectNotExistException($"The query object {typeof(TEntity).Name} does not exist in database, Please check the query parameters"); + } + else + { + return entity; + } + + } + public async Task FirstOrDefaultAsync(Expression> exp = null, bool ignoreQueryFilters = false) { @@ -764,79 +780,6 @@ namespace IRaCIS.Core.Infra.EFCore } - #endregion - - #region 待废弃 - - /// - /// 仅仅供字典表插入使用,因为efcore 动态映射列的问题 - /// - /// - /// - /// - /// - /// - public async Task InsertDictionaryAsync(TFrom from, params EntityVerifyExp[] verify) - { - var entity = _mapper.Map(from); - - - foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyUpdate && t.IsVerify)) - { - if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false)) - { - throw new BusinessValidationFailedException(verifyItem.VerifyMsg); - } - } - - if (typeof(TEntity) == typeof(Dictionary)) - { - Type type = typeof(TFrom); - - //以下是不要ID这个字段的 比如自增列ID 就不能像上名那样写 - var properties = type.GetProperties().Where(t => t.Name != "Id"); - - - string strSqlName = string.Join(",", properties.Select(p => $"[{p.Name}]").ToArray()); - - string strSqlValue = string.Join(",", properties.Select(P => $"@{P.Name}").ToArray()); - - string strSql = $"insert into {nameof(Dictionary)} ( " + strSqlName + " ) values (" + strSqlValue + ")"; - - //para Sql是参数 - SqlParameter[] para = properties.Select(p => new SqlParameter($"@{p.Name}", p.GetValue(from, null))).ToArray(); - - - _dbContext.Database.ExecuteSqlRaw(strSql, para); - - return entity; - } - else - { - throw new Exception("仅仅供字典表插入使用,因为efcore 动态映射列的问题"); - //await _dbSet.BulkInsertAsync(new List() { entity }); - - //return entity; - } - } - - public async Task AddRangeAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) - { - await _dbSet.AddRangeAsync(entities).ConfigureAwait(false); - - if (autoSave) - { - return await SaveChangesAsync(cancellationToken); - } - else - { - return false; - } - } - - - - #endregion } diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/Output/NUllCheckExtension.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/NUllCheckExtension.cs similarity index 87% rename from IRaCIS.Core.Infrastructure/_IRaCIS/Output/NUllCheckExtension.cs rename to IRaCIS.Core.Infrastructure/_IRaCIS/NUllCheckExtension.cs index a97964869..9023d7030 100644 --- a/IRaCIS.Core.Infrastructure/_IRaCIS/Output/NUllCheckExtension.cs +++ b/IRaCIS.Core.Infrastructure/_IRaCIS/NUllCheckExtension.cs @@ -12,7 +12,7 @@ namespace IRaCIS.Core.Infrastructure.Extention { if(businessObject == null) { - throw new QueryBusinessObjectNotExistException($"The query object {typeof(TEntity).Name} does not exist , or was deleted by someone else, or an incorrect parameter query caused"); + throw new QueryBusinessObjectNotExistException($"The query object {typeof(TEntity).Name} does not exist in database, Please check the query parameters"); } else { @@ -25,7 +25,7 @@ namespace IRaCIS.Core.Infrastructure.Extention { if (businessStruct == null) { - throw new QueryBusinessObjectNotExistException($"The query object {typeof(TEntity).Name} does not exist , or was deleted by someone else, or an incorrect parameter query caused"); + throw new QueryBusinessObjectNotExistException($"The query object {typeof(TEntity).Name} does not exist in database, Please check the query parameters"); } else {