예제 #1
0
        public void CanLoadSchemasAndSeeds()
        {
            var result = new DbDescription {XmlRoot = DbDescriptions.SchemasAndSeeds};

              Assert.That(result.Schemas.Count(), Is.EqualTo(2));
              Assert.That(result.Seeds.Count(), Is.EqualTo(2));
        }
예제 #2
0
        public static string UpdateConnString(DbDescription newDbDescription)
        {
            string initialStr = $"data source={newDbDescription.Server};initial catalog={newDbDescription.Name};user id=" + ConfigurationManager.AppSettings["SqlServerLogin"] + "; password="******"SqlServerPassword"] + "; MultipleActiveResultSets=True;App=EntityFramework";

            HttpContext.Current.Session["dbConnectionString"] = initialStr;
            return(initialStr);
        }
        public static void CreateDbMirror(DbDescription dbToBeCreated, DbDescription workingMirror)
        {
            DbManager.RunSqlAgainstDatabase(dbToBeCreated, ConfigurationManager.AppSettings["sqlCreateBackupDb"], dbToBeCreated.ServerDirectory);
            List <DependentQuery> listOfQueries = DbManager.BuildInsertsFrom(workingMirror, dbToBeCreated);

            DbManager.RunDQueriesAcrossDb(listOfQueries);
        }
예제 #4
0
        public List <DbDescription> GetDescriptions(DatabaseInfo databaseInfo)
        {
            var list = new List <DbDescription>();

            using (IRepository repo = DataConnectionHelper.CreateRepository(databaseInfo))
            {
                var tlist = repo.GetAllTableNames();
                if (tlist.Contains(TableName))
                {
                    var ds = repo.ExecuteSql(SelectScript);
                    if (ds.Tables.Count > 0)
                    {
                        foreach (DataRow row in ds.Tables[0].Rows)
                        {
                            var dbDesc = new DbDescription();
                            dbDesc.Object      = row[0] == DBNull.Value ? null : row[0].ToString();
                            dbDesc.Parent      = row[1] == DBNull.Value ? null : row[1].ToString();
                            dbDesc.Description = row[2] == DBNull.Value ? null : row[2].ToString();
                            list.Add(dbDesc);
                        }
                    }
                }
            }
            return(list);
        }
예제 #5
0
        public static void RunSqlAgainstDatabase(DbDescription dbDescription, string sqlFileDirectory, string serverDirectory)
        {
            string script = LoadPreparedSqlQueryForDbCreation(sqlFileDirectory, dbDescription.Name, dbDescription.ServerDirectory);

            using (var conn = ServerManager.EstablishBackupServerConnWithCredentials(dbDescription.Server, ConfigurationManager.AppSettings["SqlServerLogin"], ConfigurationManager.AppSettings["SqlServerPassword"]))
            {
                try
                {
                    IEnumerable <string> splitScript = Regex.Split(script, @"^\s*GO\s*$", RegexOptions.Multiline | RegexOptions.IgnoreCase);

                    conn.Open();
                    foreach (string splitted in splitScript)
                    {
                        if (!string.IsNullOrEmpty(splitted.Trim()))
                        {
                            using (var command = new SqlCommand(splitted, conn))
                            {
                                command.ExecuteNonQuery();
                            }
                        }
                    }
                    conn.Close();
                }
                catch (Exception e)
                {
                    _log.Error(e.Message);
                }
            }
        }
예제 #6
0
        public void CanLoadSingleSeed(string script)
        {
            var result = new DbDescription {
                XmlRoot = script
            };

            Assert.That(result.Seeds.Count(), Is.EqualTo(1));
        }
예제 #7
0
        public void DescriptionWithEmptyConnectionReturnsNullConnection()
        {
            var result = new DbDescription {
                XmlRoot = DbDescriptions.Empty
            };

            Assert.That(result.ConnectionInfo, Is.Null);
        }
예제 #8
0
        public void EmptyBaseDirectoryUsesAppDomainBaseDirectory()
        {
            var result = new DbDescription {
                XmlRoot = DbDescriptions.SingleFileSchema
            };

            Assert.That(result.Schemas[0].GetBaseDirectory(), Is.EqualTo(AppDomain.CurrentDomain.BaseDirectory));
        }
예제 #9
0
        public void DescriptionMissingSeedReturnsEmptySeedCollection()
        {
            var result = new DbDescription {
                XmlRoot = DbDescriptions.Empty
            };

            Assert.That(result.Seeds.Count(), Is.EqualTo(0));
        }
예제 #10
0
        public void StaticCreateCreatesWithDefaultTypeIfTypeIsNotSpecified()
        {
            var result = DbDescription.Create(DbDescriptions.ImplicitDbDescriptionType);

            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.AssignableTo <IDbDescription>());
            Assert.That(result, Is.InstanceOf <DbDescription>());
            Assert.That(result.ConnectionInfo.ConnectionString, Is.EqualTo("server=server"));
        }
예제 #11
0
        public void CopyOfDbConnectionInfoIsUsed()
        {
            var connectionInfo = new DbConnectionInfo {ConnectionString = "schema=schema", Provider = "System.Data.SqlClient"};
              var result = new DbDescription {ConnectionInfo = connectionInfo};

              connectionInfo.ConnectionString = "schema=other_schema";

              Assert.That(result.ConnectionInfo.ConnectionString, Is.EqualTo("schema=schema"));
        }
예제 #12
0
        public void StaticCreateCreatesDbDescription()
        {
            var result = DbDescription.Create(DbDescriptions.ExplicitDbDescriptionType);

            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.AssignableTo <IDbDescription>());
            Assert.That(result, Is.InstanceOf <TestDbDescription>());
            Assert.That(result.ConnectionInfo.ConnectionString, Is.EqualTo("server=server"));
        }
예제 #13
0
        public void CanLoadSchemasAndSeeds()
        {
            var result = new DbDescription {
                XmlRoot = DbDescriptions.SchemasAndSeeds
            };

            Assert.That(result.Schemas.Count(), Is.EqualTo(2));
            Assert.That(result.Seeds.Count(), Is.EqualTo(2));
        }
예제 #14
0
        public void CanLoadRelativeFileScript()
        {
            var result = new DbDescription
            {
                XmlRoot       = DbDescriptions.RelativeFileSchema,
                BaseDirectory = "d:\\DevP\\Utility.Database\\src\\Utility.Database.Test"
            };

            Assert.That(result.Schemas.First().Load(), Is.EqualTo("schema"));
            Assert.That(result.Seeds.First().Load(), Is.EqualTo("seed"));
        }
예제 #15
0
        public void CanLoadRelativeFileScript()
        {
            var result = new DbDescription
                   {
                     XmlRoot = DbDescriptions.RelativeFileSchema,
                     BaseDirectory = "d:\\DevP\\Utility.Database\\src\\Utility.Database.Test"
                   };

              Assert.That(result.Schemas.First().Load(), Is.EqualTo("schema"));
              Assert.That(result.Seeds.First().Load(), Is.EqualTo("seed"));
        }
예제 #16
0
 public static void SwitchToMirror()
 {
     foreach (var mirror in _currentListOfDbs)
     {
         if (mirror.Name != _currentlyConnectedDb.Name && mirror.MirrorSide == _currentlyConnectedDb.MirrorSide)
         {
             _currentlyConnectedDb = mirror;
             break;
         }
     }
     UpdateConnString(_currentlyConnectedDb);
 }
예제 #17
0
 public static void SwitchToOtherPart()
 {
     foreach (var otherPart in _currentListOfDbs)
     {
         if (otherPart.Name != _currentlyConnectedDb.Name && otherPart.MirrorSide != _currentlyConnectedDb.MirrorSide)
         {
             _currentlyConnectedDb = otherPart;
             break;
         }
     }
     UpdateConnString(_currentlyConnectedDb);
 }
예제 #18
0
    public void DescriptionWithValidConnectionLoadsConnection(string description, string connectionString, string provider, Type providerFactoryType)
    {
      var result = new DbDescription {XmlRoot = description};

      Assert.That(result.ConnectionInfo, Is.Not.Null);
      Assert.That(result.ConnectionInfo.ConnectionString, Is.EqualTo(connectionString));
      Assert.That(result.ConnectionInfo.Provider, Is.EqualTo(provider));
      if (providerFactoryType != null)
      {
        Assert.That(result.ConnectionInfo.ProviderFactory, Is.InstanceOf(providerFactoryType));
      }
    }
예제 #19
0
        public void CopyOfDbConnectionInfoIsUsed()
        {
            var connectionInfo = new DbConnectionInfo {
                ConnectionString = "schema=schema", Provider = "System.Data.SqlClient"
            };
            var result = new DbDescription {
                ConnectionInfo = connectionInfo
            };

            connectionInfo.ConnectionString = "schema=other_schema";

            Assert.That(result.ConnectionInfo.ConnectionString, Is.EqualTo("schema=schema"));
        }
예제 #20
0
        public void DescriptionWithValidConnectionLoadsConnection(string description, string connectionString, string provider, Type providerFactoryType)
        {
            var result = new DbDescription {
                XmlRoot = description
            };

            Assert.That(result.ConnectionInfo, Is.Not.Null);
            Assert.That(result.ConnectionInfo.ConnectionString, Is.EqualTo(connectionString));
            Assert.That(result.ConnectionInfo.Provider, Is.EqualTo(provider));
            if (providerFactoryType != null)
            {
                Assert.That(result.ConnectionInfo.ProviderFactory, Is.InstanceOf(providerFactoryType));
            }
        }
예제 #21
0
        public void SaveDescription(string connectionString, List <DbDescription> cache, string description, string parentName, string objectName)
        {
            DbDescription desc = null;

            if (cache != null)
            {
                desc = cache.Where(c => c.Object == objectName && c.Parent == parentName).SingleOrDefault();
            }
            if (desc != null)
            {
                UpdateDescription(description, parentName, objectName, connectionString);
            }
            else
            {
                AddDescription(description, parentName, objectName, connectionString);
            }
            cache = GetDescriptions(connectionString);
        }
예제 #22
0
        public void SaveDescription(DatabaseInfo databaseInfo, List <DbDescription> cache, string description, string parentName, string objectName)
        {
            DbDescription desc = null;

            if (cache != null)
            {
                desc = cache.Where(c => c.Object == objectName && c.Parent == parentName).SingleOrDefault();
            }
            if (desc != null)
            {
                UpdateDescription(description, parentName, objectName, databaseInfo);
            }
            else
            {
                AddDescription(description, parentName, objectName, databaseInfo);
            }
            GetDescriptions(databaseInfo);
        }
예제 #23
0
 public static void InitializeDbsData(List <DbDescription> dbs, DbDescription currDb)
 {
     _currentListOfDbs     = dbs;
     _currentlyConnectedDb = currDb;
 }
예제 #24
0
        /// <summary>
        /// 更新表相关注释
        /// </summary>
        /// <param name="tableName"></param>
        public void ReparirDBComment(string tableName)
        {
            var sql_column = $@"SELECT
                            table_name,
	                        COLUMN_Name,
	                        COLUMN_COMMENT
                        FROM
                            information_schema.COLUMNS
                        WHERE
                            TABLE_SCHEMA = 'orderservicedb' ";

            var sql_table = $@"SELECT TABLE_NAME,
                                TABLE_COMMENT
                                FROM information_schema.TABLES
                                WHERE TABLE_SCHEMA='orderservicedb' AND TABLE_TYPE='base table' ";

            if (!tableName.IsNullOrWhiteSpace())
            {
                sql_column += $" and table_name='{tableName}' ";
                sql_table  += $" and table_name='{tableName}' ";
            }
            var columnList = _dapperRepository.Query <Table_Column>(sql_column).ToList();
            var tableList  = _dapperRepository.Query <Table>(sql_table).ToList();

            if (tableList.Any() && columnList.Any())
            {
                var dllName = "LinkedX.OrderService.Core";
                var path    = new FileInfo(Assembly.GetEntryAssembly().Location).DirectoryName;

                var assembly       = Assembly.Load(dllName);
                var types          = assembly?.GetTypes();
                var entityBaseList = types?
                                     .Where(t => t.IsClass &&
                                            !t.IsGenericType &&
                                            !t.IsAbstract &&
                                            (typeof(EntityBase <Guid>).IsAssignableFrom(t) || typeof(EntityBase <int>).IsAssignableFrom(t))
                                            ).ToList();

                var entityList = types?
                                 .Where(t => t.IsClass &&
                                        !t.IsGenericType &&
                                        !t.IsAbstract &&
                                        (typeof(Entity).IsAssignableFrom(t) || typeof(Entity <Guid>).IsAssignableFrom(t) || typeof(Entity <int>).IsAssignableFrom(t))
                                        ).ToList();

                var        xmlPath = Path.Combine(path, dllName + ".xml");
                FileStream fs      = new FileStream(xmlPath, FileMode.Open, FileAccess.ReadWrite);
                var        xmlObj  = new QueryCoreXml().Deserialize(fs);

                // var member = xmlObj.Members.MemberList.Where(w => w.Name.ToLower().Contains("transactionbill"));

                var group           = columnList.GroupBy(g => g.Table_Name);
                var descriptionList = new List <DbDescription>();
                foreach (var item in group)
                {
                    var add = new DbDescription
                    {
                        Name        = item.Key,
                        Description = tableList.Where(w => w.Table_Name == item.Key).Select(s => s.Table_Comment).FirstOrDefault(),
                        Column      = new List <DbDescription>()
                    };
                    foreach (var column in item)
                    {
                        add.Column.Add(new DbDescription
                        {
                            Name        = column.Column_Name,
                            Description = column.Column_Comment
                        });
                    }
                    descriptionList.Add(add);
                }

                var xmlDescriptionList = new List <DbDescription>();
                var wantedClassList    = new List <string>();
                foreach (var member in xmlObj.Members.MemberList)
                {
                    var className = "";
                    if (member.Name.StartsWith("T"))
                    {
                        var index = member.Name.LastIndexOf('.');
                        className = member.Name.Substring(index + 1).ToLower();
                        var dbtable = descriptionList.FirstOrDefault(f => f.Name.ToLower().Contains(className));
                        if (dbtable != null)
                        {
                            dbtable.Description = member.Summary;
                            var colonIndex = member.Name.IndexOf(":");
                        }
                    }
                }

                //entityList.ForEach
            }
        }
예제 #25
0
        public void EmptyBaseDirectoryUsesAppDomainBaseDirectory()
        {
            var result = new DbDescription {XmlRoot = DbDescriptions.SingleFileSchema};

              Assert.That(result.Schemas[0].GetBaseDirectory(), Is.EqualTo(AppDomain.CurrentDomain.BaseDirectory));
        }
예제 #26
0
    public void CanLoadRelativeFileScript()
    {
      var result = new DbDescription
                   {
                     XmlRoot = DbDescriptions.RelativeFileSchema,
                     BaseDirectory = "c:\\Users\\chogan\\Dropbox\\DevP\\Buddy.Database\\src\\Buddy.Database45.Test"
                   };

      Assert.That(result.Schemas.First().Load(), Is.EqualTo("schema"));
      Assert.That(result.Seeds.First().Load(), Is.EqualTo("seed"));
    }
예제 #27
0
        public void CanLoadSingleSeed(string script)
        {
            var result = new DbDescription {XmlRoot = script};

              Assert.That(result.Seeds.Count(), Is.EqualTo(1));
        }
예제 #28
0
        public void DescriptionMissingSeedReturnsEmptySeedCollection()
        {
            var result = new DbDescription {XmlRoot = DbDescriptions.Empty};

              Assert.That(result.Seeds.Count(), Is.EqualTo(0));
        }
예제 #29
0
        public void DescriptionWithEmptyConnectionReturnsNullConnection()
        {
            var result = new DbDescription {XmlRoot = DbDescriptions.Empty};

              Assert.That(result.ConnectionInfo, Is.Null);
        }
예제 #30
0
 public void StaticCreateThrowsIfTypeIsInvalid(string xmlRoot)
 {
     Assert.That(() => DbDescription.Create(xmlRoot), Throws.ArgumentException.With.Property("ParamName").EqualTo("xmlRoot"));
 }
예제 #31
0
        public static List <DependentQuery> BuildInsertsFrom(DbDescription sourceDb, DbDescription destinationDb)
        {
            string[] tables = FetchAllTableNames();
            List <DependentQuery> dpQueries = new List <DependentQuery>();

            foreach (var table in tables)
            {
                string sqlGetAllDataFromTable = string.Format("SELECT * FROM {0}.dbo.{1}", sourceDb.Name, table);
                using (var conn = ServerManager.EstablishBackupServerConnWithCredentials(sourceDb.Server, ConfigurationManager.AppSettings["SqlServerLogin"], ConfigurationManager.AppSettings["SqlServerPassword"]))
                {
                    SqlCommand cmd = new SqlCommand(sqlGetAllDataFromTable, conn);
                    conn.Open();
                    SqlDataAdapter da        = new SqlDataAdapter(cmd);
                    DataTable      dataTable = new DataTable();
                    da.Fill(dataTable);

                    string insertQuery = "SET IDENTITY_INSERT dbName.dbo." + table + " ON \r\n";
                    insertQuery += "INSERT INTO dbName.dbo." + table + "(";
                    foreach (var column in dataTable.Columns)
                    {
                        insertQuery += column + ",";
                    }
                    insertQuery  = insertQuery.Remove(insertQuery.Length - 1);
                    insertQuery += ") Values(";

                    int iterationNumber = 0;
                    foreach (DataRow dataRow in dataTable.Rows)
                    {
                        List <SqlParameter> byteParams = new List <SqlParameter>();
                        string inQueryWithVals         = insertQuery;
                        foreach (DataColumn column in dataTable.Columns)
                        {
                            var data = dataRow[column.ToString()];
                            if (data.ToString() == string.Empty)
                            {
                                inQueryWithVals += "null,";
                            }
                            else
                            {
                                if
                                (column.DataType == typeof(string) || column.DataType == typeof(DateTime))
                                {
                                    inQueryWithVals += "'" + dataRow[column.ToString()].ToString() + "',";
                                }
                                else if (column.DataType == typeof(Byte[]))
                                {
                                    string sqlParamName = "@byteArrs" + iterationNumber++;
                                    byte[] xy           = (byte[])dataRow[column.ToString()];
                                    inQueryWithVals += sqlParamName + ",";

                                    byteParams.Add(new SqlParameter(sqlParamName, SqlDbType.VarBinary)
                                    {
                                        Direction = ParameterDirection.Input,
                                        Size      = 16,
                                        Value     = xy
                                    });
                                }
                                else
                                {
                                    inQueryWithVals += dataRow[column.ToString()] + ",";
                                }
                            }
                        }
                        inQueryWithVals  = inQueryWithVals.Remove(inQueryWithVals.Length - 1);
                        inQueryWithVals += ")";
                        inQueryWithVals += "\r\n SET IDENTITY_INSERT dbName.dbo." + table + " OFF \r\n";

                        DependentQuery dpQuery = new DependentQuery
                        {
                            DatabaseDescription = destinationDb,
                            Query       = inQueryWithVals,
                            DbSqlParams = byteParams
                        };
                        dpQuery = dpQuery.UpdateQueryParams();
                        dpQueries.Add(dpQuery);
                    }

                    conn.Close();
                    da.Dispose();
                }
            }
            return(dpQueries);
        }