コード例 #1
0
        private void AutoCreateTablesIfBrandNew()
        {
            if (!_databaseSettings.AutomaticCreateTable)
            {
                return;
            }

            _databaseEngine.GetDatabaseNames().ForEach(databaseName => {
                TransactionContext transactionContext = BeginTransaction(databaseName, IsolationLevel.Serializable);

                try
                {
                    SystemInfo sys = _databaseEngine.GetSystemInfo(databaseName, transactionContext.Transaction);
                    //表明是新数据库
                    if (sys.Version == 0)
                    {
                        if (_databaseSettings.Version != 1)
                        {
                            Rollback(transactionContext);
                            throw new DatabaseException($"Database:{databaseName} does not exists, database Version must be 1");
                        }

                        CreateTablesByDatabase(databaseName, transactionContext);

                        _databaseEngine.UpdateSystemVersion(databaseName, 1, transactionContext.Transaction);
                    }

                    Commit(transactionContext);
                }
                catch (Exception ex)
                {
                    Rollback(transactionContext);
                    throw new DatabaseException($"Auto Create Table Failed, Database:{databaseName}, Reason:{ex.Message}", ex);
                }
            });
        }