private static async Task <TEntity> GetOrCreateEntityAsync <TEntity>(NesteoDbContext dbContext, Expression <Func <TEntity, bool> > predicate, Func <TEntity> factoryFunc) where TEntity : class { // Get db set DbSet <TEntity> dbSet = dbContext.Set <TEntity>(); // If the entity exists in the local snapshot, return it directly TEntity entity = dbSet.Local.FirstOrDefault(predicate.Compile()); if (entity != null) { return(entity); } // Search the entity in the database entity = await dbSet.FirstOrDefaultAsync(predicate).ConfigureAwait(false); if (entity != null) { return(entity); } // Entity doesn't exist yet. Create a new one entity = factoryFunc.Invoke(); return(dbSet.Add(entity).Entity); }
protected CrudServiceBase(NesteoDbContext dbContext, IMapper mapper) { DbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext)); Mapper = mapper ?? throw new ArgumentNullException(nameof(mapper)); Entities = dbContext.Set <TEntity>(); }