/// <summary> /// 通过给定的数据库连接字符串与提供者名称初始化<see cref="Database"/>实例。 /// </summary> /// <param name="context">数据执行上下文。</param> /// <param name="connectionString">数据库连接字符串。</param> /// <param name="providerName">提供者名称。</param> internal Database(DbContext context, string connectionString, string providerName) : this(context, providerName) { var currentConnection = _Provider.Factory.CreateConnection(); currentConnection.ConnectionString = connectionString; _DatabaseExecutor = new DatabaseExecutor(_Provider, currentConnection, true); }
public DatabasePlaygroundRunner() { _databaseFilePath = "test.db"; _connectionString = $"URI=file:{_databaseFilePath}"; _databaseExecutor = new DatabaseExecutor(_connectionString); _departmentReader = new DepartmentReader(_databaseExecutor); _departmentWriter = new DepartmentWriter(_databaseExecutor); //_nodeReader = new NodeReader(_databaseExecutor); _employeeWriter = new EmployeeWriter(_databaseExecutor); _employeeReader = new EmployeeReader(_databaseExecutor); }
public void OneTimeSetUp() { TestSetUp.RegisterSetUp((count, data) => { return(DatabaseExecutor.Run( count == 0 ? DatabaseExecutorCommand.ResetAndDatabase : DatabaseExecutorCommand.ResetAndData, AgentTester.Configuration["ConnectionStrings:Database"], typeof(DatabaseExecutor).Assembly, typeof(Database.Program).Assembly, Assembly.GetExecutingAssembly()) == 0); }); AgentTester.StartupTestServer <Startup>(environmentVariablesPrefix: "AppName_"); }
public void OneTimeSetUp() { TestSetUp.RegisterSetUp(async(count, data) => { return(await DatabaseExecutor.RunAsync( count == 0 ? DatabaseExecutorCommand.ResetAndDatabase : DatabaseExecutorCommand.ResetAndData, AgentTester.Configuration["ConnectionStrings:BeefDemo"], typeof(DatabaseExecutor).Assembly, typeof(Database.Program).Assembly, Assembly.GetExecutingAssembly()).ConfigureAwait(false) == 0); }); AgentTester.StartupTestServer <Startup>(environmentVariablesPrefix: "Beef_"); }
public void OneTimeSetUp() { TestSetUp.RegisterSetUp(async(count, data) => { return(await DatabaseExecutor.RunAsync( count == 0 ? DatabaseExecutorCommand.ResetAndDatabase : DatabaseExecutorCommand.ResetAndData, AgentTester.Configuration["ConnectionStrings:BeefDemo"], useBeefDbo: true, typeof(Database.Program).Assembly, Assembly.GetExecutingAssembly(), typeof(Beef.Demo.Abc.Database.Scripts).Assembly).ConfigureAwait(false) == 0); }); AgentTester.TestServerStart <Startup>("Beef"); }
public void OneTimeSetUp() { TestSetUp.RegisterSetUp(async(count, _) => { return(await DatabaseExecutor.RunAsync( count == 0 ? DatabaseExecutorCommand.ResetAndDatabase : DatabaseExecutorCommand.ResetAndData, AgentTester.Configuration["ConnectionStrings:Database"], useBeefDbo: true, typeof(Database.Program).Assembly, Assembly.GetExecutingAssembly()).ConfigureAwait(false) == 0); }); AgentTester.TestServerStart <Startup>("AppName"); AgentTester.DefaultExpectNoEvents = true; }
public void OneTimeSetUp() { var config = AgentTester.BuildConfiguration <Startup>("Beef"); TestSetUp.SetDefaultLocalReferenceData <IReferenceData, ReferenceDataAgentProvider, IReferenceDataAgent, ReferenceDataAgent>(); TestSetUp.RegisterSetUp(async(count, data) => { return(await DatabaseExecutor.RunAsync( count == 0 ? DatabaseExecutorCommand.ResetAndDatabase : DatabaseExecutorCommand.ResetAndData, config["ConnectionStrings:BeefDemo"], useBeefDbo: true, typeof(Database.Program).Assembly, Assembly.GetExecutingAssembly(), typeof(Beef.Demo.Abc.Database.Scripts).Assembly).ConfigureAwait(false) == 0); }); }
/// <summary> /// 执行命令。 /// </summary> /// <param name="executor">数据库执行对象。</param> /// <returns>对数据库实际的影响行数。</returns> internal int Execute(DatabaseExecutor executor) { var start = DateTime.Now; BeginExecute(start); var recordsAffectCount = ExecuteImp(executor); EndExecute(start); if (ConcurrencyExpectCount > 0 && ConcurrencyExpectCount != recordsAffectCount) { throw new DbCommitConcurrencyException(Res.ExceptionCommitConcurrency); } return(recordsAffectCount); }
public void OneTimeSetUp() { TestSetUp.DefaultEnvironmentVariablePrefix = "AppName"; TestSetUp.SetDefaultLocalReferenceData <IReferenceData, ReferenceDataAgentProvider, IReferenceDataAgent, ReferenceDataAgent>(); TestSetUp.DefaultExpectNoEvents = true; var config = AgentTester.BuildConfiguration <Startup>(); TestSetUp.RegisterSetUp(async(count, _) => { return(await DatabaseExecutor.RunAsync( count == 0 ? DatabaseExecutorCommand.ResetAndDatabase : DatabaseExecutorCommand.ResetAndData, config["ConnectionStrings:Database"], useBeefDbo: true, typeof(Database.Program).Assembly, Assembly.GetExecutingAssembly()).ConfigureAwait(false) == 0); }); }
/// <inheritdoc/> internal override int ExecuteImp(DatabaseExecutor executor) { var command = executor.CreateCommand(commandBuilder.ToString()); if (Parameters.Count > 0) { command.Parameters.AddRange(Parameters.Values.ToArray()); } OutputCommand(command); var readOperates = operates.Where(operate => operate.HasResult && operate.Output != null).ToArray(); if (readOperates.Length > 0) { using (var reader = command.ExecuteReader()) { if (splitesOperates != null) { foreach (var operate in readOperates) { if (splitesOperates.TryGetValue(operate, out SplitIndexLength value)) { value.Operate.Split(value.Index, value.Length, () => operate.Read(reader)); } else { operate.Read(reader); } reader.NextResult(); } } else { foreach (var operate in readOperates) { operate.Read(reader); reader.NextResult(); } } return(reader.RecordsAffected); } } else { return(command.ExecuteNonQuery()); } }
public void OneTimeSetUp() { TestSetUp.DefaultEnvironmentVariablePrefix = "Hr"; TestSetUp.AddWebApiAgentArgsType <IHrWebApiAgentArgs, HrWebApiAgentArgs>(); TestSetUp.DefaultExpectNoEvents = true; var config = AgentTester.BuildConfiguration <Startup>(); TestSetUp.RegisterSetUp(async(count, _) => { return(await DatabaseExecutor.RunAsync(new DatabaseExecutorArgs( count == 0 ? DatabaseExecutorCommand.ResetAndDatabase : DatabaseExecutorCommand.ResetAndData, config["ConnectionStrings:Database"], typeof(Database.Program).Assembly, Assembly.GetExecutingAssembly()) { UseBeefDbo = true }).ConfigureAwait(false) == 0); }); }
/// <inheritdoc/> internal override int ExecuteImp(DatabaseExecutor executor) { var command = executor.CreateCommand(_Statement); if (_SplitInfo != null) { int recordsAffectCount = 0; _SplitInfo.Operate.Split(_SplitInfo.Index, _SplitInfo.Length, delegate() { recordsAffectCount = ExecuteCommand(command); }); return(recordsAffectCount); } else { return(ExecuteCommand(command)); } }
public void OneTimeSetUp() { var config = AgentTester.BuildConfiguration <Startup>("Beef"); TestSetUp.SetDefaultLocalReferenceData <IReferenceData, ReferenceDataAgentProvider, IReferenceDataAgent, ReferenceDataAgent>(); TestSetUp.AddWebApiAgentArgsType <IDemoWebApiAgentArgs, DemoWebApiAgentArgs>(); TestSetUp.RegisterSetUp(async(count, data) => { var args = new DatabaseExecutorArgs( count == 0 ? DatabaseExecutorCommand.ResetAndDatabase : DatabaseExecutorCommand.ResetAndData, config["ConnectionStrings:BeefDemo"], typeof(Database.Program).Assembly, Assembly.GetExecutingAssembly(), typeof(Beef.Demo.Abc.Database.Scripts).Assembly) { UseBeefDbo = true }.AddSchemaOrder("Sec", "Ref", "Test", "Demo"); return(await DatabaseExecutor.RunAsync(args).ConfigureAwait(false) == 0); }); }
/// <summary> /// 执行命令。 /// </summary> /// <param name="executor">数据库执行对象。</param> /// <returns>对数据库实际的影响行数。</returns> internal int Execute(DatabaseExecutor executor) { var command = executor.CreateCommand(commandBuilder.ToString()); if (parameters.Count > 0) { command.Parameters.AddRange(parameters.Values.ToArray()); } var readOperates = operates.Where(operate => operate.HasResult && operate.Output != null).ToArray(); int recordsAffectCount = 0; #if DEBUG var start = DateTime.Now; Debug.WriteLine($"---------- 开始执行 :{start.ToString("HH:mm:ss.fff")} ----------"); Debug.WriteLine(""); Debug.WriteLine(command.CommandText); Debug.WriteLine(""); foreach (DbParameter p in command.Parameters) { Debug.WriteLine($"\t{p.ParameterName}\t:{p.Value}"); } #endif if (readOperates.Length > 0) { using (var reader = command.ExecuteReader()) { if (splitesOperates != null) { foreach (var operate in readOperates) { if (splitesOperates.TryGetValue(operate, out SplitIndexLength value)) { value.Operate.Split(value.Index, value.Length, () => operate.Read(reader)); } else { operate.Read(reader); } reader.NextResult(); } } else { foreach (var operate in readOperates) { operate.Read(reader); reader.NextResult(); } } recordsAffectCount = reader.RecordsAffected; } } else { recordsAffectCount = command.ExecuteNonQuery(); } #if DEBUG var end = DateTime.Now; var space = end - start; Debug.WriteLine(""); Debug.WriteLine($"---------- 执行完成 :{end.ToString("HH:mm:ss.fff")},执行耗时:{space.TotalMilliseconds}毫秒 ----------"); Debug.WriteLine(""); #endif if (ConcurrencyExpectCount > 0 && ConcurrencyExpectCount != recordsAffectCount) { throw new DbCommitConcurrencyException(Res.ExceptionCommitConcurrency); } return(recordsAffectCount); }
internal abstract int ExecuteImp(DatabaseExecutor executor);
/// <summary> /// 通过给定的数据库连接对象与提供者名称初始化<see cref="Database"/>实例。 /// </summary> /// <param name="context">数据执行上下文。</param> /// <param name="existingConnection">存在的连接对象。</param> /// <param name="providerName">提供程序名称。</param> /// <param name="contextOwnsConnection">当前数据上下文是否拥有该连接。</param> internal Database(DbContext context, DbConnection existingConnection, string providerName, bool contextOwnsConnection) : this(context, GetProviderNameByConnection(providerName, existingConnection)) { _DatabaseExecutor = new DatabaseExecutor(_Provider, existingConnection, contextOwnsConnection); }