コード例 #1
0
 public ImpatientDbContextOptionsExtension WithCompatibility(ImpatientCompatibility compatibility)
 {
     return(new ImpatientDbContextOptionsExtension(this)
     {
         compatibility = compatibility
     });
 }
コード例 #2
0
 public DefaultQueryProcessingContextFactory(
     DescriptorSet descriptorSet,
     ImpatientCompatibility compatibility)
 {
     this.descriptorSet = descriptorSet ?? throw new ArgumentNullException(nameof(descriptorSet));
     this.compatibility = compatibility;
 }
コード例 #3
0
 public EFCoreQueryProcessingContextFactory(
     ICurrentDbContext currentDbContext,
     DescriptorSet descriptorSet,
     ImpatientCompatibility compatibility)
 {
     this.currentDbContext = currentDbContext ?? throw new ArgumentNullException(nameof(currentDbContext));
     this.descriptorSet    = descriptorSet ?? throw new ArgumentNullException(nameof(descriptorSet));
     this.compatibility    = compatibility;
 }
コード例 #4
0
        public static IServiceProvider CreateServiceProvider(
            DescriptorSet descriptorSet          = null,
            string connectionString              = null,
            ImpatientCompatibility compatibility = ImpatientCompatibility.Default)
        {
            var services = new ServiceCollection();

            #region services that would typically be DI-handled

            services.AddSingleton <IImpatientQueryCache, DefaultImpatientQueryCache>();

            services.AddSingleton <TranslatabilityAnalyzingExpressionVisitor>();

            services.AddSingleton <ITypeMappingProvider, DefaultTypeMappingProvider>();

            services.AddSingleton <IQueryFormattingProvider, SqlServerQueryFormattingProvider>();

            services.AddScoped <IReadValueExpressionFactoryProvider, DefaultReadValueExpressionFactoryProvider>();

            services.AddScoped <IRewritingExpressionVisitorProvider, DefaultRewritingExpressionVisitorProvider>();

            services.AddScoped <IProviderSpecificRewritingExpressionVisitorProvider, SqlServerRewritingExpressionVisitorProvider>();

            services.AddScoped <IOptimizingExpressionVisitorProvider, DefaultOptimizingExpressionVisitorProvider>();

            services.AddScoped <IComposingExpressionVisitorProvider, DefaultComposingExpressionVisitorProvider>();

            services.AddScoped <ICompilingExpressionVisitorProvider, DefaultCompilingExpressionVisitorProvider>();

            services.AddScoped <IQueryableInliningExpressionVisitorFactory, DefaultQueryInliningExpressionVisitorFactory>();

            services.AddScoped <IQueryTranslatingExpressionVisitorFactory, DefaultQueryTranslatingExpressionVisitorFactory>();

            services.AddScoped <IQueryProcessingContextFactory>(provider =>
            {
                return(new DefaultQueryProcessingContextFactory(
                           provider.GetRequiredService <DescriptorSet>(),
                           compatibility));
            });

            services.AddScoped <IDbCommandExecutorFactory>(provider => provider.GetRequiredService <TestDbCommandExecutorFactory>());

            services.AddScoped <IImpatientQueryProcessor, DefaultImpatientQueryProcessor>();

            #endregion

            services.AddSingleton(descriptorSet ?? DescriptorSet.Empty);

            services.AddSingleton <ImpatientQueryProvider>();

            services.AddScoped <NorthwindQueryContext>();

            services.AddScoped(provider => new TestDbCommandExecutorFactory(connectionString));

            return(services.BuildServiceProvider());
        }
コード例 #5
0
 public QueryProcessingContext(
     IQueryProvider queryProvider,
     DescriptorSet descriptorSet,
     ImpatientCompatibility compatibility)
 {
     QueryProvider    = queryProvider;
     DescriptorSet    = descriptorSet;
     Compatibility    = compatibility;
     ParameterMapping = new Dictionary <object, ParameterExpression>();
 }
コード例 #6
0
 protected ImpatientDbContextOptionsExtension(ImpatientDbContextOptionsExtension template)
 {
     compatibility = template.compatibility;
 }
コード例 #7
0
 public ImpatientDbContextOptionsExtension()
 {
     compatibility = ImpatientCompatibility.Default;
 }
コード例 #8
0
 public ImpatientDbContextOptionsBuilder WithCompatibility(ImpatientCompatibility compatibility)
 {
     return(WithOption(e => e.WithCompatibility(compatibility)));
 }
        public static IServiceCollection AddImpatientEFCoreQueryCompiler(
            this IServiceCollection services,
            ImpatientCompatibility compatibility)
        {
            foreach (var descriptor in services.Where(s => s.ServiceType == typeof(IQueryCompiler)).ToArray())
            {
                services.Remove(descriptor);
            }

            services.AddSingleton <IImpatientQueryCache, DefaultImpatientQueryCache>();

            services.AddSingleton <ModelExpressionProvider>();

            services.AddSingleton <DescriptorSetCache>();

            services.AddSingleton <ModelQueryExpressionCache>();

            services.AddSingleton <TranslatabilityAnalyzingExpressionVisitor>();

            services.AddSingleton <IQueryTranslatingExpressionVisitorFactory, DefaultQueryTranslatingExpressionVisitorFactory>();

            services.AddSingleton <IReadValueExpressionFactoryProvider, DefaultReadValueExpressionFactoryProvider>();

            services.AddSingleton <ITypeMappingProvider, EFCoreTypeMappingProvider>();

            services.AddSingleton <IQueryFormattingProvider, SqlServerQueryFormattingProvider>();

            services.AddScoped <IOptimizingExpressionVisitorProvider, DefaultOptimizingExpressionVisitorProvider>();

            services.AddScoped <IComposingExpressionVisitorProvider, EFCoreComposingExpressionVisitorProvider>();

            services.AddScoped <IRewritingExpressionVisitorProvider, EFCoreRewritingExpressionVisitorProvider>();

            services.AddScoped <IProviderSpecificRewritingExpressionVisitorProvider, SqlServerRewritingExpressionVisitorProvider>();

            services.AddScoped <ICompilingExpressionVisitorProvider, EFCoreCompilingExpressionVisitorProvider>();

            services.AddScoped <IQueryableInliningExpressionVisitorFactory, EFCoreQueryableInliningExpressionVisitorFactory>();

            services.AddScoped <IDbCommandExecutorFactory, EFCoreDbCommandExecutorFactory>();

            services.AddScoped <IQueryProcessingContextFactory>(provider =>
            {
                return(new EFCoreQueryProcessingContextFactory(
                           provider.GetRequiredService <ICurrentDbContext>(),
                           provider.GetRequiredService <DescriptorSet>(),
                           compatibility));
            });

            services.AddScoped <IImpatientQueryProcessor, DefaultImpatientQueryProcessor>();

            services.AddScoped <IQueryCompiler, ImpatientQueryCompiler>();

            services.AddScoped(provider =>
            {
                var cache   = provider.GetRequiredService <DescriptorSetCache>();
                var context = provider.GetRequiredService <ICurrentDbContext>().Context;

                return(cache.GetDescriptorSet(context));
            });

            return(services);
        }