Example #1
0
 /// <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);
 }
Example #3
0
        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_");
        }
Example #4
0
        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_");
        }
Example #5
0
        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");
        }
Example #6
0
        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;
        }
Example #7
0
        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);
            });
        }
Example #8
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);
        }
Example #9
0
        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);
            });
        }
Example #10
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());
            }
        }
Example #11
0
        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);
            });
        }
Example #12
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));
            }
        }
Example #13
0
        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);
            });
        }
Example #14
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);
        }
Example #15
0
 internal abstract int ExecuteImp(DatabaseExecutor executor);
Example #16
0
 /// <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);
 }