From aeeb70d8f03dc01b3e4534190734cd1963aa6b44 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 1 Jun 2022 16:23:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=93=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repository/IRepository.cs | 41 ++++++++++++++++--- 1 file changed, 36 insertions(+), 5 deletions(-) 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