diff --git a/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs b/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs index b772400b0..bfedf9a50 100644 --- a/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs +++ b/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs @@ -11,9 +11,7 @@ using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; -using EFCore.BulkExtensions; using IRaCIS.Core.Domain.Share; -using System.Reflection; namespace IRaCIS.Core.Infra.EFCore { @@ -34,6 +32,14 @@ namespace IRaCIS.Core.Infra.EFCore Task AnyAsync(Expression> filter, bool ignoreQueryFilters = false) where T : Entity; + /// + ///不跟踪 查询单个实体,不会出现NUll + /// + /// + /// + /// + Task FirstAsync(Expression> exp = null, bool isTracking = false, bool ignoreQueryFilters = false) where T : Entity; + Task FirstOrDefaultAsync(Expression> exp = null, bool ignoreQueryFilters = false) where T : Entity; Task CountAsync(Expression> exp = null, bool ignoreQueryFilters = false) where T : Entity; @@ -257,6 +263,34 @@ namespace IRaCIS.Core.Infra.EFCore return await query.CountAsync().ConfigureAwait(false); + } + + public async Task FirstAsync(Expression> exp = null, bool isTracking = false, bool ignoreQueryFilters = false) where T : Entity + { + + var query = _dbContext.Set().AsQueryable(); + + if (!isTracking) + { + query = query.AsNoTracking(); + } + + if (ignoreQueryFilters) + { + query = query.IgnoreQueryFilters(); + } + + var entity = await query.FirstOrDefaultAsync(); + + if (entity is null) + { + throw new QueryBusinessObjectNotExistException($"The query object {typeof(T).Name} does not exist in database, Please check the query parameters"); + } + else + { + return entity; + } + } public async Task FirstOrDefaultAsync(Expression> exp = null, bool ignoreQueryFilters = false) where T : Entity { @@ -367,9 +401,6 @@ namespace IRaCIS.Core.Infra.EFCore return await SaveChangesAsync(autoSave); } - - - #endregion public async Task BatchDeleteAsync(Expression> deleteFilter) where T : Entity