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); } }
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); }
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); } } }