Пример #1
0
        public static IQueryable <TEntity> GetQueryable <TEntity>(
            this IReadOnlyBasicRepository <TEntity> repository,
            params Expression <Func <TEntity, object> >[] includePropertySelectors)
            where TEntity : class, IEntity
        {
            var repo = ProxyHelper.UnProxy(repository) as ISupportsPredicateQuery <TEntity>;

            return(repo != null?repo.GetQueryable(includePropertySelectors) : null);
        }
Пример #2
0
        public static IQueryable <TEntity> GetQueryable <TEntity>(
            this IReadOnlyBasicRepository <TEntity> repository,
            Expression <Func <TEntity, bool> > predicate = null)
            where TEntity : class, IEntity
        {
            var repo = ProxyHelper.UnProxy(repository) as ISupportsPredicateQuery <TEntity>;

            return(repo != null?repo.GetQueryable(predicate) : null);
        }
Пример #3
0
 public static IMongoDbRepository <TEntity> ToMongoDbRepository <TEntity>(this IReadOnlyBasicRepository <TEntity> repository)
     where TEntity : class, IEntity
 {
     if (repository is IMongoDbRepository <TEntity> mongoDbRepository)
     {
         return(mongoDbRepository);
     }
     throw new ArgumentException("Given repository does not implement " + typeof(IMongoDbRepository <TEntity>).AssemblyQualifiedName, nameof(repository));
 }
Пример #4
0
        /// <summary>
        /// 获取<typeparamref name="TEntity"/>查询(不跟踪改变的)数据源,并可附加过滤条件模型
        /// </summary>
        /// <param name="model">数据过滤模型</param>
        /// <param name="includeDetails">是否包含明细,默认true</param>
        /// <returns>符合条件的数据集</returns>
        public static IQueryable <TEntity> CreateFilteredQuery <TEntity>(this IReadOnlyBasicRepository <TEntity> repository,
                                                                         IFilterModel model = null,
                                                                         Func <IQueryable <TEntity>, IFilterModel, IQueryable <TEntity> > func = null,
                                                                         bool includeDetails = true)
            where TEntity : class, IEntity
        {
            var repo = ProxyHelper.UnProxy(repository) as ISupportsPredicateQuery <TEntity>;

            return(repo != null?repo.CreateFilteredQuery(model, func, includeDetails) : null);
        }
Пример #5
0
        public static async Task <long> GetCountAsync <TEntity>(
            this IReadOnlyBasicRepository <TEntity> repository,
            [NotNull] Expression <Func <TEntity, bool> > predicate,
            CancellationToken cancellationToken = default)
            where TEntity : class, IEntity
        {
            Check.NotNull(predicate, nameof(predicate));
            var repo = ProxyHelper.UnProxy(repository) as ISupportsPredicateQuery <TEntity>;

            return(repo != null ? await repo.GetCountAsync(predicate, cancellationToken) : 0);
        }
Пример #6
0
        public static IEfRepository <TEntity, TKey> ToEfRepository <TEntity, TKey>(this IReadOnlyBasicRepository <TEntity, TKey> repository)
            where TEntity : class, IEntity <TKey>
        {
            var efRepository = repository as IEfRepository <TEntity, TKey>;

            if (efRepository == null)
            {
                throw new ArgumentException("Given repository does not implement " + typeof(IEfRepository <TEntity, TKey>).AssemblyQualifiedName, nameof(repository));
            }

            return(efRepository);
        }
Пример #7
0
        /// <summary>
        /// 检查实体是否存在
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <typeparam name="TKey"></typeparam>
        /// <param name="repository"></param>
        /// <param name="predicate">查询条件谓语表达式</param>
        /// <param name="id">实体的主键</param>
        /// <param name="cancellationToken">取消线程标识</param>
        /// <returns></returns>
        public static async Task <bool> CheckExistsAsync <TEntity, TKey>(
            this IReadOnlyBasicRepository <TEntity, TKey> repository,
            [NotNull] Expression <Func <TEntity, bool> > predicate,
            TKey id = default,
            CancellationToken cancellationToken = default)
            where TEntity : class, IEntity <TKey>
        {
            Check.NotNull(predicate, nameof(predicate));
            var repo = ProxyHelper.UnProxy(repository) as ISupportsPredicateQuery <TEntity, TKey>;

            return(repo != null ? await repo.CheckExistsAsync(predicate, id, cancellationToken): false);
        }
Пример #8
0
        /// <summary>
        /// 递归获取实体列表
        /// </summary>
        /// <typeparam name="TEntity">必须继承<see cref="IMayHaveParent<TKey>"/></typeparam>
        /// <typeparam name="TKey"></typeparam>
        /// <param name="repository"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public static async Task <List <TEntity> > GetLoopListAsync <TEntity, TKey>(
            this IReadOnlyBasicRepository <TEntity, TKey> repository,
            TKey id)
            where TEntity : class, IEntity <TKey>
        {
            if (!typeof(TEntity).HasImplementedRawGeneric(typeof(IMayHaveParent <>)))
            {
                throw new Exception($"实体类型不支持该扩展方法({MethodBase.GetCurrentMethod().DeclaringType.Name})");
            }
            var repo = ProxyHelper.UnProxy(repository) as ISupportsSqlQuery <TEntity, TKey>;

            return(repo != null ? await repo.GetLoopListAsync(id) : null);
        }
Пример #9
0
 public static IMongoQueryable <TEntity> GetMongoQueryable <TEntity>(this IReadOnlyBasicRepository <TEntity> repository)
     where TEntity : class, IEntity
 {
     return(repository.ToMongoDbRepository().GetMongoQueryable());
 }
Пример #10
0
 public static Task <IMongoCollection <TEntity> > GetCollectionAsync <TEntity>(this IReadOnlyBasicRepository <TEntity> repository, CancellationToken cancellationToken = default)
     where TEntity : class, IEntity
 {
     return(repository.ToMongoDbRepository().GetCollectionAsync(cancellationToken));
 }
Пример #11
0
 public static IMongoCollection <TEntity> GetCollection <TEntity>(this IReadOnlyBasicRepository <TEntity> repository)
     where TEntity : class, IEntity
 {
     return(repository.ToMongoDbRepository().Collection);
 }
Пример #12
0
 public static IMongoDatabase GetDatabase <TEntity>(this IReadOnlyBasicRepository <TEntity> repository)
     where TEntity : class, IEntity
 {
     return(repository.ToMongoDbRepository().Database);
 }
 public DemoUserManager(IReadOnlyBasicRepository <AppUser, Guid> users)
 {
     _users = users;
 }
Пример #14
0
 public static DbContext GetDbContext <TEntity>(this IReadOnlyBasicRepository <TEntity> repository)
     where TEntity : class, IEntity
 {
     return(repository.ToEfCoreRepository().DbContext);
 }
Пример #15
0
 public static Task <IMongoQueryable <TEntity> > GetMongoQueryableAsync <TEntity>(this IReadOnlyBasicRepository <TEntity> repository, CancellationToken cancellationToken = default, AggregateOptions aggregateOptions = null)
     where TEntity : class, IEntity
 {
     return(repository.ToMongoDbRepository().GetMongoQueryableAsync(cancellationToken, aggregateOptions));
 }
Пример #16
0
 public static Task <IAggregateFluent <TEntity> > GetAggregateAsync <TEntity>(this IReadOnlyBasicRepository <TEntity> repository, CancellationToken cancellationToken = default)
     where TEntity : class, IEntity
 {
     return(repository.ToMongoDbRepository().GetAggregateAsync(cancellationToken));
 }
Пример #17
0
 /// <summary>
 /// Gets the database set.
 /// </summary>
 /// <typeparam name="TEntity">The type of the t entity.</typeparam>
 /// <typeparam name="TKey">The type of the t key.</typeparam>
 /// <param name="repository">The repository.</param>
 /// <returns>DbSet&lt;TEntity&gt;.</returns>
 public static DbSet <TEntity> GetDbSet <TEntity, TKey>(this IReadOnlyBasicRepository <TEntity, TKey> repository)
     where TEntity : class, IEntity <TKey>
 {
     return(repository.ToEfCoreRepository().DbSet);
 }
Пример #18
0
 public static Task <DbSet <TEntity> > GetDbSetAsync <TEntity>(this IReadOnlyBasicRepository <TEntity> repository)
     where TEntity : class, IEntity
 {
     return(repository.ToEfCoreRepository().GetDbSetAsync());
 }