Пример #1
0
    public static async Task <object> ExecuteQuery <TDbContext>(
        string query,
        ServiceCollection services,
        TDbContext dbContext,
        Inputs?inputs,
        Filters?filters)
        where TDbContext : DbContext
    {
        query = query.Replace("'", "\"");
        EfGraphQLConventions.RegisterInContainer(
            services,
            userContext => (TDbContext)((Dictionary <string, object>)userContext)[typeof(TDbContext).Name],
            dbContext.Model,
            userContext => filters);
        EfGraphQLConventions.RegisterConnectionTypesInContainer(services);
        await using var provider = services.BuildServiceProvider();
        using var schema         = new Schema(provider);
        var documentExecuter = new EfDocumentExecuter();

        #region ExecutionOptionsWithFixIdTypeRule
        var executionOptions = new ExecutionOptions
        {
            Schema          = schema,
            Query           = query,
            Inputs          = inputs,
            ValidationRules = FixIdTypeRule.CoreRulesWithIdFix
        };
        executionOptions.UserContext.Add(typeof(TDbContext).Name, dbContext);
        #endregion

        var executionResult = await documentExecuter.ExecuteWithErrorCheck(executionOptions);

        return(executionResult.Data);
    }
    public static async Task <object> ExecuteQuery <TDbContext>(
        string query,
        ServiceCollection services,
        TDbContext dbContext,
        Inputs inputs,
        GlobalFilters filters)
        where TDbContext : DbContext
    {
        query = query.Replace("'", "\"");
        EfGraphQLConventions.RegisterInContainer(
            services,
            dbContext,
            userContext => (TDbContext)userContext,
            filters);
        using (var provider = services.BuildServiceProvider())
            using (var schema = new Schema(new FuncDependencyResolver(provider.GetRequiredService)))
            {
                var documentExecuter = new EfDocumentExecuter();

                #region ExecutionOptionsWithFixIdTypeRule
                var executionOptions = new ExecutionOptions
                {
                    Schema          = schema,
                    Query           = query,
                    UserContext     = dbContext,
                    Inputs          = inputs,
                    ValidationRules = FixIdTypeRule.CoreRulesWithIdFix
                };
                #endregion

                var executionResult = await documentExecuter.ExecuteWithErrorCheck(executionOptions);

                return(executionResult.Data);
            }
    }
    public static async Task <object> ExecuteQuery <TDbContext>(
        string query,
        ServiceCollection services,
        TDbContext data,
        Inputs?inputs,
        Filters?filters)
        where TDbContext : DbContext
    {
        query = query.Replace("'", "\"");
        EfGraphQLConventions.RegisterInContainer(
            services,
            userContext => data,
            data.Model,
            userContext => filters);
        EfGraphQLConventions.RegisterConnectionTypesInContainer(services);
        await using var provider = services.BuildServiceProvider();
        using var schema         = new Schema(provider);
        var documentExecuter = new EfDocumentExecuter();

        var executionOptions = new ExecutionOptions
        {
            Schema      = schema,
            Query       = query,
            UserContext = new UserContextSingleDb <TDbContext>(data),
            Inputs      = inputs,
        };

        var executionResult = await documentExecuter.ExecuteWithErrorCheck(executionOptions);

        return(executionResult.Data);
    }
    static async Task ExecutionResultData(
        ExecutionOptions executionOptions,
        [CallerFilePath] string sourceFile = "")
    {
        var executer = new EfDocumentExecuter();
        var result   = await executer.ExecuteWithErrorCheck(executionOptions);

        await Verify(result.Serialize(), sourceFile : sourceFile).ScrubInlineGuids();
    }
    static async Task ExecutionResultData(ExecutionOptions executionOptions)
    {
        var documentExecuter = new EfDocumentExecuter();
        var executionResult  = await documentExecuter.ExecuteWithErrorCheck(executionOptions);

        var data    = (Dictionary <string, object>)executionResult.Data;
        var objects = (List <object>)data.Single().Value;

        Assert.Single(objects);
    }
    public static async Task <object> ExecuteQuery(string query, ServiceCollection services, DbContext dbContext, Inputs inputs, GlobalFilters filters)
    {
        query = query.Replace("'", "\"");
        EfGraphQLConventions.RegisterInContainer(services, dbContext.Model, filters);
        using (var provider = services.BuildServiceProvider())
            using (var schema = new Schema(new FuncDependencyResolver(provider.GetRequiredService)))
            {
                var documentExecuter = new EfDocumentExecuter();

                var executionOptions = new ExecutionOptions
                {
                    Schema      = schema,
                    Query       = query,
                    UserContext = dbContext,
                    Inputs      = inputs
                };

                var executionResult = await documentExecuter.ExecuteWithErrorCheck(executionOptions);

                return(executionResult.Data);
            }
    }
    public async Task Run()
    {
        GraphTypeTypeRegistry.Register <Entity1, Entity1Graph>();
        GraphTypeTypeRegistry.Register <Entity2, Entity2Graph>();

        var sqlInstance1 = new SqlInstance <DbContext1>(
            constructInstance: builder => new DbContext1(builder.Options));

        var sqlInstance2 = new SqlInstance <DbContext2>(
            constructInstance: builder => new DbContext2(builder.Options));

        var query = @"
{
  entity1
  {
    property
  },
  entity2
  {
    property
  }
}";

        var entity1 = new Entity1
        {
            Property = "the entity1"
        };
        var entity2 = new Entity2
        {
            Property = "the entity2"
        };

        var services = new ServiceCollection();

        services.AddSingleton <MultiContextQuery>();
        services.AddSingleton <Entity1Graph>();
        services.AddSingleton <Entity2Graph>();

        await using (var database1 = await sqlInstance1.Build())
            await using (var database2 = await sqlInstance2.Build())
            {
                await database1.AddDataUntracked(entity1);

                await database2.AddDataUntracked(entity2);

                var dbContext1 = database1.NewDbContext();
                var dbContext2 = database2.NewDbContext();
                services.AddSingleton(dbContext1);
                services.AddSingleton(dbContext2);

                #region RegisterMultipleInContainer

                EfGraphQLConventions.RegisterInContainer(
                    services,
                    userContext => ((UserContext)userContext).DbContext1);
                EfGraphQLConventions.RegisterInContainer(
                    services,
                    userContext => ((UserContext)userContext).DbContext2);

                #endregion

                await using var provider = services.BuildServiceProvider();
                using var schema         = new MultiContextSchema(new FuncDependencyResolver(provider.GetRequiredService !));
                var documentExecuter = new EfDocumentExecuter();

                #region MultiExecutionOptions

                var executionOptions = new ExecutionOptions
                {
                    Schema      = schema,
                    Query       = query,
                    UserContext = new UserContext(dbContext1, dbContext2)
                };

                #endregion

                var result = await documentExecuter.ExecuteWithErrorCheck(executionOptions);

                await Verifier.Verify(result.Data);
            }
    }
Пример #8
0
    public async Task Run()
    {
        GraphTypeTypeRegistry.Register <Entity1, Entity1Graph>();
        GraphTypeTypeRegistry.Register <Entity2, Entity2Graph>();

        var sqlInstance1 = new SqlInstance <DbContext1>(
            constructInstance: builder => new DbContext1(builder.Options));

        var sqlInstance2 = new SqlInstance <DbContext2>(
            constructInstance: builder => new DbContext2(builder.Options));

        var query = @"
{
  entity1
  {
    property
  },
  entity2
  {
    property
  }
}";

        var entity1 = new Entity1
        {
            Property = "the entity1"
        };
        var entity2 = new Entity2
        {
            Property = "the entity2"
        };

        var sqlDatabase1 = await sqlInstance1.Build();

        var sqlDatabase2 = await sqlInstance2.Build();

        await using (var dbContext = sqlDatabase1.NewDbContext())
        {
            dbContext.AddRange(entity1);
            await dbContext.SaveChangesAsync();
        }

        await using (var dbContext = sqlDatabase2.NewDbContext())
        {
            dbContext.AddRange(entity2);
            await dbContext.SaveChangesAsync();
        }

        await using var dbContext1 = sqlDatabase1.NewDbContext();
        await using var dbContext2 = sqlDatabase2.NewDbContext();
        var services = new ServiceCollection();

        services.AddSingleton <MultiContextQuery>();
        services.AddSingleton <Entity1Graph>();
        services.AddSingleton <Entity2Graph>();
        services.AddSingleton(dbContext1);
        services.AddSingleton(dbContext2);

        #region RegisterMultipleInContainer
        EfGraphQLConventions.RegisterInContainer(
            services,
            userContext => (DbContext1)((Dictionary <string, object>)userContext)["dbContext1"]);
        EfGraphQLConventions.RegisterInContainer(
            services,
            userContext => (DbContext2)((Dictionary <string, object>)userContext)["dbContext2"]);
        #endregion

        await using var provider = services.BuildServiceProvider();
        using var schema         = new MultiContextSchema(provider);
        var documentExecuter = new EfDocumentExecuter();
        #region MultiExecutionOptions
        var executionOptions = new ExecutionOptions
        {
            Schema = schema,
            Query  = query,
        };
        executionOptions.UserContext.Add("dbContext1", dbContext1);
        executionOptions.UserContext.Add("dbContext2", dbContext2);
        #endregion

        var executionResult = await documentExecuter.ExecuteWithErrorCheck(executionOptions);
        await Verify(executionResult.Data);
    }
Пример #9
0
    public async Task Run()
    {
        GraphTypeTypeRegistry.Register <Entity1, Entity1Graph>();
        GraphTypeTypeRegistry.Register <Entity2, Entity2Graph>();

        var sqlInstance1 = new SqlInstance <DbContext1>(
            constructInstance: builder => new DbContext1(builder.Options));

        var sqlInstance2 = new SqlInstance <DbContext2>(
            constructInstance: builder => new DbContext2(builder.Options));

        var query = @"
{
  entity1
  {
    property
  },
  entity2
  {
    property
  }
}";

        var entity1 = new Entity1
        {
            Property = "the entity1"
        };
        var entity2 = new Entity2
        {
            Property = "the entity2"
        };

        var sqlDatabase1 = await sqlInstance1.Build();

        var sqlDatabase2 = await sqlInstance2.Build();

        using (var dbContext = sqlDatabase1.NewDbContext())
        {
            dbContext.AddRange(entity1);
            await dbContext.SaveChangesAsync();
        }

        using (var dbContext = sqlDatabase2.NewDbContext())
        {
            dbContext.AddRange(entity2);
            await dbContext.SaveChangesAsync();
        }

        using (var dbContext1 = sqlDatabase1.NewDbContext())
            using (var dbContext2 = sqlDatabase2.NewDbContext())
            {
                var services = new ServiceCollection();

                services.AddSingleton <MultiContextQuery>();
                services.AddSingleton(typeof(Entity1Graph));
                services.AddSingleton(typeof(Entity2Graph));

                #region RegisterMultipleInContainer
                EfGraphQLConventions.RegisterInContainer(
                    services,
                    dbContext1,
                    userContext => ((UserContext)userContext).DbContext1);
                EfGraphQLConventions.RegisterInContainer(
                    services,
                    dbContext2,
                    userContext => ((UserContext)userContext).DbContext2);
                #endregion

                using (var provider = services.BuildServiceProvider())
                    using (var schema = new MultiContextSchema(new FuncDependencyResolver(provider.GetRequiredService)))
                    {
                        var documentExecuter = new EfDocumentExecuter();
                        #region MultiExecutionOptions
                        var executionOptions = new ExecutionOptions
                        {
                            Schema      = schema,
                            Query       = query,
                            UserContext = new UserContext
                            {
                                DbContext1 = dbContext1,
                                DbContext2 = dbContext2
                            }
                        };
                        #endregion

                        var executionResult = await documentExecuter.ExecuteWithErrorCheck(executionOptions);

                        ObjectApprover.VerifyWithJson(executionResult.Data);
                    }
            }
    }